Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prism.Avalonia Library #3127

Draft
wants to merge 23 commits into
base: master
Choose a base branch
from

Conversation

DamianSuess
Copy link
Contributor

@DamianSuess DamianSuess commented Apr 28, 2024

Description of Change

Adds fixture for Prism.Avalonia using Avalonia v11.1.x. Pairing together these two awesome libraries under one house.

API Changes

None

Behavioral Changes

Allows users to utilize the cross-platform framework Avalonia for desktop applications.

PR Checklist

  • Import base Prism.Avalonia framework
  • Sync packages to use local projects
  • Rebased on top of master at time of PR
  • Changes adhere to coding standard
  • Add tests
  • Fix tests to run under Prism's toolset - IN-PROGRESS
  • Add e2e samples
  • Minimize code duplication
  • Directory.Build.props

@DamianSuess DamianSuess marked this pull request as draft April 28, 2024 14:18
@dansiegel
Copy link
Member

Thanks for the PR. I'll try to review this as soon as I can.

Copy link
Member

@dansiegel dansiegel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

noticing this is largely just reusing what currently exists in the Prism.Avalonia project. This should start removing duplicated code, similar to what we've done with Prism for Uno.WinUI using linked code from the Prism.Wpf project where possible. The goal should be to have a minimally different API surface and eliminate duplicate code as much as possible.

Comment on lines 5 to 9
"src\\Containers\\Prism.DryIoc.Shared\\Prism.DryIoc.Shared.shproj",
"src\\Avalonia\\Prism.Avalonia\\Prism.Avalonia.csproj",
"src\\Avalonia\\Prism.DryIoc.Avalonia\\Prism.DryIoc.Avalonia.csproj",
"tests\\Avalonia\\Prism.Avalonia.Tests\\Prism.Avalonia.Tests.csproj",
"tests\\Avalonia\\Prism.DryIoc.Avalonia.Tests\\Prism.DryIoc.Avalonia.Tests.csproj"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this would need to be updated

Copy link
Contributor Author

@DamianSuess DamianSuess Apr 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you Dan for the quick response on this one. I was curious about the best strategy to move forward with regarding that. In the first round, I was planning on getting a solid build running and then minimizing if that's okay. The current import is based on tag, v9.0.401-pre.

An example of super-minor differences is WPF's DependencyObject vs. Avalonia's AvaloniaObject.

I'll take a look into the Uno.WinUI implementation, thank you for the tip. Currently, I'm working on the importation of the tests

@dansiegel
Copy link
Member

btw be sure to update the CI Builds. It should be pretty much copy/paste and change the file names... if you need some help on it let me know.

  • NEW: .github/workflows/build_avalonia.yml
  • UPDATE: .github/workflows/ci.yml
  • UPDATE: .github/workflows/start-release.yml

@DamianSuess
Copy link
Contributor Author

Will do. @dansiegel, when you're free, mind if we sync up on Teams?

@dansiegel
Copy link
Member

It'll have to be next week but shoot me an email with some times that work for you and we can set something up

@DamianSuess
Copy link
Contributor Author

Sounds great. Thanks again, Dan.

@dansiegel dansiegel added this to the 9.1 milestone Jul 23, 2024
@dansiegel
Copy link
Member

You'll want to:

  1. Rebase
  2. Update the Directory.Build.props with the following
  <When Condition="$(IsAvaloniaProject)">
    <PropertyGroup>
      <DefineConstants>$(DefineConstants);AVALONIA</DefineConstants>
    </PropertyGroup>
    <ItemGroup>
      <Using Include="Avalonia" />
      <Using Include="Avalonia.Controls" />
      <Using Include="Avalonia.Controls.ApplicationLifetimes" />
      <Using Include="Avalonia.Controls.Primitives" />
      <Using Include="Avalonia.Interactivity" />
      <Using Include="Avalonia.Markup.Xaml"/>
      <Using Include="Avalonia.Metadata" />
      <Using Include="Avalonia.Threading" />
      <Using Include="Avalonia.Styling" />
      <Using Include="Avalonia.VisualTree" />
    </ItemGroup>
  </When>
  1. Start removing classes that have identical or near identical code to WPF. If there are small tweaks it is preferential to include a #if AVALONIA block to conditionally compile Avalonia specific code vs WPF or Uno Platform. The goal should be similar to the Uno Platform implementation where most of the code is actually part of WPF.

@DamianSuess
Copy link
Contributor Author

Dan,

Thanks for the heads up and suggestions to get this puppy rolling. I'll try to get to it this week.

I'm going to upgrade the other repository first to get the GA release of Prism.Avalonia v9.0.537, followed by copying over results to our combined branch. Overall, this should be pretty quick process since the delta between ..401-pre and ..537 is non-impactful. 👍

@DamianSuess
Copy link
Contributor Author

@dansiegel thanks again for the sync-up yesterday! Looking forward to the 9.1 release

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants