'
description: File a bug report
labels: ["bug", "to verify"]
assignees: []
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report! Please make sure to add as much detail as you can, Bug reports without a [reproduction](https://github.com/prismlibrary/prism/blob/master/.github/repro.md) will be closed. This will help us diagnose the issue faster and thus resolve it quicker.
- type: textarea
id: description
attributes:
label: Description
description: Please give us a detailed description of the issue that you're seeing. You can add screenshots and videos as well. We require [reproduction projects](https://github.com/prismlibrary/prism/blob/master/.github/repro.md), please provide them through a GitHub repo and link that here.
placeholder: Tell us what you see!
validations:
required: true
- type: textarea
id: repro-steps
attributes:
label: Steps to Reproduce
description: Describe all the steps we need to take to show the behavior that you have observed. Also, include what you expected to happen and what did actually happen.
placeholder: |
1. Create a File > New App
2. Add a `Button` like so: ``
3. Click the added button and observe the bug 🐞
Expected outcome: a bug was added
Actual outcome: a ladybug appeared
validations:
required: true
- type: dropdown
id: platform-with-bug
attributes:
label: Platform with bug
description: What Platform is this bug affecting?
options:
- WPF
- Xamarin.Forms
- Uno Platform - UWP
- Uno Platform - WinUI
- .NET MAUI
- Prism Core
validations:
required: true
- type: dropdown
id: platforms-affected
attributes:
label: Affected platforms
description: Select all or any platform that you see this issue on. This helps us determine if it's something platform-specific or in the core. If you were only able to test on 1 platform, please check the last option to inform us about that.
multiple: true
options:
- iOS
- Android
- Windows
- macOS
- Other (Tizen, Linux, etc.)
- I was *not* able test on other platforms
validations:
required: true
- type: textarea
id: workaround
attributes:
label: Did you find any workaround?
description: Did you find any workaround for this issue? This can unblock other people while waiting for this issue to be resolved or even give us a hint on how to fix this.
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for back ticks.
render: shell
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: File a bug with the Prism Templates
url: https://github.com/PrismLibrary/Prism.Templates/issues/new/choose
about: Issues related to the Prism Templates should be filed in the Prism.Templates repo
- name: Ask a Question
url: https://github.com/PrismLibrary/Prism/discussions/category_choices
about: Please ask and answer questions for Prism here.
- name: Read the Docs
url: https://prismlibrary.com/docs
about: Be sure you've read the docs!
- name: Report missing docs
url: https://github.com/PrismLibrary/Prism-Documentation/issues/new
about: Did we miss docs on something? Let us know here!
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: "[Enhancement] YOUR IDEA!"
labels: enhancement
assignees: ''
---
## Summary
Please provide a brief summary of your proposal. Two to three sentences is best here.
## API Changes
Include a list of all API changes, additions, subtractions as would be required by your proposal. These APIs should be considered placeholders, so the naming is not as important as getting the concepts correct. If possible you should include some "example" code of usage of your new API.
e.g.
In order to facilitate the new Shiny Button api, a bool is added to the Button class. This is done as a bool because it is simpler to data bind and other reasons...
var button = new Button ();
button.MakeShiny = true; // new API
The MakeShiny API works even if the button is already visible.
## Intended Use Case
Provide a detailed example of where your proposal would be used and for what purpose.
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
### Description
### Steps to Reproduce
1.
2.
3.
### Expected Behavior
### Actual Behavior
### Basic Information
- Version with issue:
- Last known good version:
- Xamarin.Forms version:
- IDE:
### Screenshots
### Reproduction Link
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Description of Change
Describe your changes here.
### Bugs Fixed
- Provide links to bugs here
### API Changes
List all API changes here (or just put None), example:
Added:
- void INavigationService.GoBackToRootAsync();
Changed:
- void INavigationService.GoBackAsync => bool INavigationService.GoBackAsync
### Behavioral Changes
Describe any non-bug related behavioral changes that may change how users app behaves when upgrading to this version of the codebase.
### PR Checklist
- [ ] Has tests (if omitted, state reason in description)
- [ ] Rebased on top of master at time of PR
- [ ] Changes adhere to coding standard
================================================
FILE: .github/lock.yml
================================================
# Configuration for Lock Threads - https://github.com/dessant/lock-threads
# Number of days of inactivity before a closed issue or pull request is locked
daysUntilLock: 14
# Skip issues and pull requests created before a given timestamp. Timestamp must
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
skipCreatedBefore: false
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
exemptLabels: []
# Label to add before locking, such as `outdated`. Set to `false` to disable
lockLabel: false
# Comment to post before locking. Set to `false` to disable
lockComment: >
This thread has been automatically locked since there has not been
any recent activity after it was closed. Please open a new issue for
related bugs.
# Assign `resolved` as the reason for locking. Set to `false` to disable
setLockReason: true
# Limit to only `issues` or `pulls`
# only: issues
# Optionally, specify configuration settings just for `issues` or `pulls`
# issues:
# exemptLabels:
# - help-wanted
# lockLabel: outdated
# pulls:
# daysUntilLock: 30
# Repository to extend settings from
# _extends: repo
================================================
FILE: .github/repo.md
================================================
# Prism Library Bug Report Reproduction Guide
First or all, thank you for reporting this potential bug. Here you will find more information about why we ask you for a reproducible example of the problem, and how to provide it.
## What is a reproduction?
A reproduction, reproducible example or just repro for short is the most basic code to demonstrate the issue that you're seeing. It's the simplest way to reproduce the issue.
Ideally, you should be able to reproduce the issue by just running the code in the project you have provided and see the problem. If any reproduction steps are needed, either note them in the issue or include them in the project somehow.
## Why do we ask for a reproducible example?
Depending on your project a codebase can be pretty big. The bigger your project, the more factors that can be of influence on a bug or issue that you might be seeing.
In order to be sure that this is something that is happening in Prism and not something in your code (or a combination of these things), it is super helpful to have a small sample that reproduces the issue. This way we can:
* better pinpoint the source of the issue;
* therefore, we can fix the issue faster;
* and we can make sure that the issue is not a false positive.
It also acts as a double-edged sword. When you take your code apart piece-by-piece in a new project, adding things back one by one, it will become very clear what different factors are at play here and you might discover that the issue might be something in your code. At the very least you will be able to provide a very detailed description of what you're seeing. That helps us get to the cause faster and resolve the issue quicker.
### I just want to report a bug, why do you want a reproduction?
We hear this a lot. We understand you're busy, we're all busy! A reproduction is not just about pleasing us or you doing our work. As already mentioned above, it will help you get a better understanding of where the issue is exactly. We've seen lots of cases where people realized, through a reproduction, that the solution was right within their reach. Regardless of it being a bug in Prism or not.
We like to see this as a team effort.
#### But I don't have time for this!
Please help us, help you! The Prism team works on Prism in their spare time, and for free, we cannot make time to try to reproduce your issues. This is an open-source project under the MIT license. Provided as-is, without any support or guarantees. We care about our project and therefore by extension also about your project. But realize that when you come onto our repo, maybe frustrated because things are not working and you just drop a one-liner, no reproduction, mentioning that you don't have the time, that's also not very motivating for us. On the other end of these GitHub issues are still people. People that are doing their best to move this project forward, people that do not enjoying seeing you being blocked.
Also consider how that comes across. If you don't have the time to report in detail what is going on, then really how important is the issue? If this is really important and blocking you, it would seem to make sense to prioritize getting us all the details to help resolve this faster. We are all here to help you. But remember that we don't know your project and we don't know any details, please help us understand and be nice.
## How to provide a reproduction project?
With a reproduction we want to rule out a couple of things:
* The issue is not in your code, but in the Prism Library;
* The issue has not been already resolved in the latest version of Prism which may not be the latest version available on NuGet.org;
Therefore we would like to propose the following steps to create a reproduction sample:
* Check if you are using the latest version of Prism and you can still reproduce the issue;
* If yes, please check any available preview versions of Prism and see if you can reproduce the issue;
* If you still can, please check to see if there are is an issue already opened on the repository for it;
* If there is, see if you can add any more detail about your specific case, that might help to resolve it quicker. If you don't have any additional information, add an emoji to the first post of the issue so we know how many people are impacted by this.
* If there is no issue for it yet, please open one and provide detailed answers to everything in the New Issue form.
At this point we would love for you to include the reproduction.
* Start with a File > New project, in other words, a clean, new Prism project. Make sure that you are using the last version of Prism.
* Start extracting the code from your project, piece-by-piece, until you have reach the issue.
* Try to remove some code or make small changes to see how that influences the issue you're seeing. Remove any code that is not needed to reproduce the issue. This is noise and will interfere with getting to a cause and solution.
* Put the code on a GitHub repository and include that link in the issue that you're opening.
**Note: we can't accept any zip files attached to the issue.** If we need the code in a zip, we can get that from the GitHub repository. This will also make it easier to collaborate. If we think we spot something that doesn't look right, we can open a PR on your repro repo (😬) and you can easily see the differences.
## Big don'ts!
- Never put any sensitive information in your code. No API keys, credentials, personal information, etc.
- Never put any proprietary code in your reproduction. We are contractually not allowed to look at code that you do not own without bit legal hassles and NDA's.
- Never submit binaries (mostly covered by putting it on a GitHub repo)
- Do not reference external data-sources, this should rarely be needed.
- Always refer to concrete version numbers. Avoid saying "this happens in the latest version". We don't know if you're using a preview version or maybe you _think_ you're using the latest version but actually aren't. To avoid any confusion, always refer to exact version numbers.
- Do not confuse an open issue with paid support. If you require actual Enterprise Support please see Monthly or Yearly Support options with [AvantiPoint](https://avantipoint.com/developer/support)
================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- 'blocked by platform'
- 'to verify'
- 'roadmap'
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 4
pulls:
exemptLabels:
- 'DO-NOT-MERGE-!!! :stop_sign:'
================================================
FILE: .github/workflows/build_avalonia.yml
================================================
name: build_avalonia
on:
workflow_dispatch:
pull_request:
branches:
- master
paths:
- .github/workflows/build_forms.yml
- Directory.Build.props
- Directory.Build.targets
- Directory.Packages.props
- xunit.runner.json
- 'src/Prism.Core/**'
- 'src/Prism.Events/**'
- 'tests/Prism.Core.Tests/**'
- 'src/Avalonia/**'
- 'tests/Avalonia/**'
jobs:
build-prism-avalonia:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Avalonia
solution-path: PrismLibrary_Avalonia.slnf
dotnet-version: 10.0.100
================================================
FILE: .github/workflows/build_core.yml
================================================
name: build_core
on:
workflow_dispatch:
pull_request:
branches:
- master
paths:
- .github/workflows/build_core.yml
- Directory.Build.props
- Directory.Build.targets
- Directory.Packages.props
- xunit.runner.json
- 'src/Prism.Core/**'
- 'src/Prism.Events/**'
- 'tests/Prism.Core.Tests/**'
jobs:
build-prism-core:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Core
solution-path: PrismLibrary_Core.slnf
dotnet-version: 10.0.100
================================================
FILE: .github/workflows/build_maui.yml
================================================
name: build_maui
on:
workflow_dispatch:
pull_request:
branches:
- master
paths:
- .github/workflows/build_maui.yml
- Directory.Build.props
- Directory.Build.targets
- Directory.Packages.props
- xunit.runner.json
- 'src/Prism.Core/**'
- 'src/Prism.Events/**'
- 'tests/Prism.Core.Tests/**'
- 'src/Maui/**'
- 'tests/Containers/**'
- 'tests/Maui/**'
jobs:
build-prism-maui:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Maui
solution-path: PrismLibrary_Maui.slnf
install-workload: maui maui-tizen
dotnet-version: 10.0.100
================================================
FILE: .github/workflows/build_uno.yml
================================================
name: build_uno
on:
workflow_dispatch:
pull_request:
branches:
- master
paths:
- .github/workflows/build_forms.yml
- Directory.Build.props
- Directory.Build.targets
- Directory.Packages.props
- xunit.runner.json
- 'src/Prism.Core/**'
- 'src/Prism.Events/**'
- 'tests/Prism.Core.Tests/**'
- 'src/Wpf/**'
- 'tests/Wpf/**'
- 'src/Uno/**'
- 'tests/Uno/**'
jobs:
build-prism-uno:
uses: avantipoint/workflow-templates/.github/workflows/msbuild-build.yml@v1
with:
name: Build Prism.Uno
solution-path: PrismLibrary_Uno.slnf
windows-sdk-version: 18362
dotnet-version: 10.0.100
install-workload: ios android macos maccatalyst wasm-tools tvos
uno-check: false
uno-check-version: 1.33.1
uno-check-parameters: '--skip xcode --skip gtk3 --skip vswin --skip androidemulator --skip androidsdk --skip vsmac --skip dotnetnewunotemplates'
run-tests: false
================================================
FILE: .github/workflows/build_wpf.yml
================================================
name: build_wpf
on:
workflow_dispatch:
pull_request:
branches:
- master
paths:
- .github/workflows/build_forms.yml
- Directory.Build.props
- Directory.Build.targets
- Directory.Packages.props
- xunit.runner.json
- 'src/Prism.Core/**'
- 'src/Prism.Events/**'
- 'tests/Prism.Core.Tests/**'
- 'src/Wpf/**'
- 'tests/Wpf/**'
jobs:
build-prism-wpf:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Wpf
solution-path: PrismLibrary_Wpf.slnf
dotnet-version: 10.0.100
================================================
FILE: .github/workflows/ci.yml
================================================
name: Prism CI
on:
push:
branches:
- master
- 'releases/**'
paths:
- .github/workflows/ci.yml
- Directory.Build.props
- Directory.Build.targets
- Directory.Packages.props
- xunit.runner.json
- version.json
- LICENSE
- global.json
- 'src/**'
pull_request:
branches:
- master
- 'releases/**'
paths:
- .github/workflows/ci.yml
workflow_dispatch:
jobs:
build-prism-core:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Core
solution-path: PrismLibrary_Core.slnf
code-sign: false
artifact-name: Core
dotnet-version: 10.0.100
secrets:
codeSignKeyVault: ${{ secrets.CodeSignKeyVault }}
codeSignClientId: ${{ secrets.CodeSignClientId }}
codeSignTenantId: ${{ secrets.CodeSignTenantId }}
codeSignClientSecret: ${{ secrets.CodeSignClientSecret }}
codeSignCertificate: ${{ secrets.CodeSignCertificate }}
build-prism-wpf:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Wpf
solution-path: PrismLibrary_Wpf.slnf
code-sign: false
artifact-name: Wpf
dotnet-version: 10.0.100
secrets:
codeSignKeyVault: ${{ secrets.CodeSignKeyVault }}
codeSignClientId: ${{ secrets.CodeSignClientId }}
codeSignTenantId: ${{ secrets.CodeSignTenantId }}
codeSignClientSecret: ${{ secrets.CodeSignClientSecret }}
codeSignCertificate: ${{ secrets.CodeSignCertificate }}
build-prism-uno:
uses: avantipoint/workflow-templates/.github/workflows/msbuild-build.yml@v1
with:
name: Build Prism.Uno
solution-path: PrismLibrary_Uno.slnf
windows-sdk-version: 18362
dotnet-version: 10.0.100
install-workload: ios android macos maccatalyst wasm-tools tvos
uno-check: false
uno-check-version: 1.33.1
uno-check-parameters: '--skip xcode --skip gtk3 --skip vswin --skip androidemulator --skip androidsdk --skip vsmac --skip dotnetnewunotemplates'
run-tests: false
code-sign: false
artifact-name: Uno
secrets:
codeSignKeyVault: ${{ secrets.CodeSignKeyVault }}
codeSignClientId: ${{ secrets.CodeSignClientId }}
codeSignTenantId: ${{ secrets.CodeSignTenantId }}
codeSignClientSecret: ${{ secrets.CodeSignClientSecret }}
codeSignCertificate: ${{ secrets.CodeSignCertificate }}
build-prism-maui:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Maui
solution-path: PrismLibrary_Maui.slnf
install-workload: maui maui-tizen
code-sign: false
artifact-name: Maui
dotnet-version: 10.0.100
secrets:
codeSignKeyVault: ${{ secrets.CodeSignKeyVault }}
codeSignClientId: ${{ secrets.CodeSignClientId }}
codeSignTenantId: ${{ secrets.CodeSignTenantId }}
codeSignClientSecret: ${{ secrets.CodeSignClientSecret }}
codeSignCertificate: ${{ secrets.CodeSignCertificate }}
build-prism-avalonia:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Avalonia
solution-path: PrismLibrary_Avalonia.slnf
code-sign: false
artifact-name: Avalonia
dotnet-version: 10.0.100
secrets:
codeSignKeyVault: ${{ secrets.CodeSignKeyVault }}
codeSignClientId: ${{ secrets.CodeSignClientId }}
codeSignTenantId: ${{ secrets.CodeSignTenantId }}
codeSignClientSecret: ${{ secrets.CodeSignClientSecret }}
codeSignCertificate: ${{ secrets.CodeSignCertificate }}
generate-consolidated-artifacts:
needs: [build-prism-core, build-prism-wpf, build-prism-uno, build-prism-maui, build-prism-avalonia]
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download Core
uses: actions/download-artifact@v4
with:
name: Core
path: artifacts\Core
- name: Download Wpf
uses: actions/download-artifact@v4
with:
name: Wpf
path: artifacts\Wpf
- name: Download Uno
uses: actions/download-artifact@v4
with:
name: Uno
path: artifacts\Uno
- name: Download Maui
uses: actions/download-artifact@v4
with:
name: Maui
path: artifacts\Maui
- name: Download Avalonia
uses: actions/download-artifact@v4
with:
name: Avalonia
path: artifacts\Avalonia
- name: Consolidate Artifacts
run: build\consolidate-artifacts.ps1
shell: powershell
- name: Upload Consolidated NuGets
uses: actions/upload-artifact@v4
with:
name: NuGet
path: .\artifacts\nuget
deploy-internal:
uses: avantipoint/workflow-templates/.github/workflows/deploy-nuget.yml@v1
needs: generate-consolidated-artifacts
if: ${{ github.event_name == 'push' }}
with:
name: Deploy Internal
secrets:
feedUrl: ${{ secrets.IN_HOUSE_NUGET_FEED }}
apiKey: ${{ secrets.IN_HOUSE_API_KEY }}
deploy-commercial-plus:
uses: avantipoint/workflow-templates/.github/workflows/deploy-nuget.yml@v1
needs: generate-consolidated-artifacts
if: ${{ github.event_name == 'push' }}
with:
name: Deploy Commercial Plus
secrets:
feedUrl: ${{ secrets.PRISM_NUGET_FEED }}
apiKey: ${{ secrets.PRISM_NUGET_TOKEN }}
================================================
FILE: .github/workflows/publish-release.yml
================================================
name: Publish Prism Release
on:
release:
types: [published]
jobs:
publish-internal:
uses: avantipoint/workflow-templates/.github/workflows/deploy-nuget-from-release.yml@v1
secrets:
feedUrl: ${{ secrets.IN_HOUSE_NUGET_FEED }}
apiKey: ${{ secrets.IN_HOUSE_API_KEY }}
publish-commercial-plus:
uses: avantipoint/workflow-templates/.github/workflows/deploy-nuget-from-release.yml@v1
secrets:
feedUrl: ${{ secrets.PRISM_NUGET_FEED }}
apiKey: ${{ secrets.PRISM_NUGET_TOKEN }}
================================================
FILE: .github/workflows/sponsor-actions.yml
================================================
on:
issues:
types: [opened]
pull_request:
types: [opened]
jobs:
sponsor_job:
runs-on: ubuntu-latest
name: Add Sponsor Labels
steps:
- name: Add Sponsor Labels
id: sponsor-labels
uses: brianlagunas/sponsor-action@v1.0
with:
maintainers: 'brianlagunas,dansiegel'
github_token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/start-release.yml
================================================
name: Start NuGet Release
on:
workflow_dispatch:
jobs:
build-prism-core:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Core
solution-path: PrismLibrary_Core.slnf
code-sign: true
artifact-name: Core
build-args: /p:OfficialRelease=true
secrets:
codeSignKeyVault: ${{ secrets.CodeSignKeyVault }}
codeSignClientId: ${{ secrets.CodeSignClientId }}
codeSignTenantId: ${{ secrets.CodeSignTenantId }}
codeSignClientSecret: ${{ secrets.CodeSignClientSecret }}
codeSignCertificate: ${{ secrets.CodeSignCertificate }}
build-prism-wpf:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Wpf
solution-path: PrismLibrary_Wpf.slnf
code-sign: true
artifact-name: Wpf
build-args: /p:OfficialRelease=true
secrets:
codeSignKeyVault: ${{ secrets.CodeSignKeyVault }}
codeSignClientId: ${{ secrets.CodeSignClientId }}
codeSignTenantId: ${{ secrets.CodeSignTenantId }}
codeSignClientSecret: ${{ secrets.CodeSignClientSecret }}
codeSignCertificate: ${{ secrets.CodeSignCertificate }}
build-prism-uno:
uses: avantipoint/workflow-templates/.github/workflows/msbuild-build.yml@v1
with:
name: Build Prism.Uno
solution-path: PrismLibrary_Uno.slnf
windows-sdk-version: 18362
dotnet-version: 8.0.300
install-workload: ios android macos maccatalyst wasm-tools
uno-check: false
uno-check-version: 1.25.1
uno-check-parameters: '--skip xcode --skip gtk3 --skip vswin --skip androidemulator --skip androidsdk --skip vsmac --skip dotnetnewunotemplates'
run-tests: false
code-sign: true
artifact-name: Uno
build-args: /p:OfficialRelease=true
secrets:
codeSignKeyVault: ${{ secrets.CodeSignKeyVault }}
codeSignClientId: ${{ secrets.CodeSignClientId }}
codeSignTenantId: ${{ secrets.CodeSignTenantId }}
codeSignClientSecret: ${{ secrets.CodeSignClientSecret }}
codeSignCertificate: ${{ secrets.CodeSignCertificate }}
build-prism-maui:
uses: avantipoint/workflow-templates/.github/workflows/dotnet-build.yml@v1
with:
name: Build Prism.Maui
solution-path: PrismLibrary_Maui.slnf
dotnet-version: 8.0.x
install-workload: maui maui-tizen
code-sign: true
artifact-name: Maui
build-args: /p:OfficialRelease=true
secrets:
codeSignKeyVault: ${{ secrets.CodeSignKeyVault }}
codeSignClientId: ${{ secrets.CodeSignClientId }}
codeSignTenantId: ${{ secrets.CodeSignTenantId }}
codeSignClientSecret: ${{ secrets.CodeSignClientSecret }}
codeSignCertificate: ${{ secrets.CodeSignCertificate }}
generate-consolidated-artifacts:
needs: [build-prism-core, build-prism-wpf, build-prism-uno]
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download Core
uses: actions/download-artifact@v3
with:
name: Core
path: artifacts\Core
- name: Download Wpf
uses: actions/download-artifact@v3
with:
name: Wpf
path: artifacts\Wpf
- name: Download Uno
uses: actions/download-artifact@v3
with:
name: Uno
path: artifacts\Uno
- name: Download Maui
uses: actions/download-artifact@v3
with:
name: Maui
path: artifacts\Maui
- name: Consolidate Artifacts
run: build\consolidate-artifacts.ps1
shell: powershell
- name: Upload Consolidated NuGets
uses: actions/upload-artifact@v3
with:
name: NuGet
path: .\artifacts\nuget
release:
uses: avantipoint/workflow-templates/.github/workflows/generate-release.yml@v1
needs: [generate-consolidated-artifacts]
permissions:
contents: write
with:
package-name: Prism.Core
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.sln.docstates
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
# build/
bld/
[Bb]in/
[Oo]bj/
# Visual Studio cache/options directory
.vs/
.droidres/
# DNX
artifacts/
# Roslyn cache directories
*.ide/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
#NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding addin-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# NuGet
.nuget/
nuget.exe
*.nuget.props
*.nuget.targets
*.lock.json
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# If using the old MSBuild-Integrated Package Restore, uncomment this:
#!**/packages/repositories.config
# Windows Azure Build Output
csx/
*.build.csdef
# Windows Store app package directory
AppPackages/
BundleArtifacts/
# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
# *.pfx
*.publishsettings
node_modules/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# DotNet Tools
**/build/.store/*
# MFractor
.mfractor/
# Jetbrains files
.idea*
# Binlog
*.binlog
# macOS
.DS_Store
# VSCode
.mono
================================================
FILE: .vscode/extensions.json
================================================
{
"recommendations": [
"ms-dotnettools.csharp",
"ms-vscode.powershell",
"editorconfig.editorconfig",
"shd101wyy.markdown-preview-enhanced",
"streetsidesoftware.code-spell-checker",
"unoplatform.vscode"
]
}
================================================
FILE: .vscode/launch.json
================================================
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"version": "0.2.0",
"configurations": [
{
"name": "Uno Platform Mobile",
"type": "Uno",
"request": "launch",
// any Uno* task will do, this is simply to satisfy vscode requirement when a launch.json is present
"preLaunchTask": "Uno: android | Debug | android-x64"
},
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"name": "Debug (Chrome, WebAssembly)",
"type": "chrome",
"request": "launch",
"url": "http://localhost:5001",
"webRoot": "${workspaceFolder}/e2e/Uno/HelloWorld.Wasm",
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"timeout": 30000,
"server": {
"runtimeExecutable": "dotnet",
"program": "run",
"args": ["--no-build"],
"outputCapture": "std",
"timeout": 30000,
"cwd": "${workspaceFolder}/e2e/Uno/HelloWorld.Wasm"
}
},
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"name": "Skia.GTK (Debug)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build-skia-gtk",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/e2e/Uno/HelloWorld.Skia.Gtk/bin/Debug/net8.0/HelloWorld.Skia.Gtk.dll",
"args": [],
"env": {
"DOTNET_MODIFIABLE_ASSEMBLIES": "debug"
},
"cwd": "${workspaceFolder}/e2e/Uno/HelloWorld.Skia.Gtk",
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
"console": "internalConsole",
"stopAtEntry": false
}
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.expand": false,
"explorer.fileNesting.patterns": {
"*.xaml": "$(capture).xaml.cs",
"*.ts": "${capture}.js",
"*.js": "${capture}.js.map, ${capture}.min.js, ${capture}.d.ts",
"*.jsx": "${capture}.js",
"*.tsx": "${capture}.ts",
"tsconfig.json": "tsconfig.*.json",
"package.json": "package-lock.json, yarn.lock, pnpm-lock.yaml"
},
"[azure-pipelines]": {
"editor.insertSpaces": true,
"editor.tabSize": 2,
"editor.quickSuggestions": {
"other": true,
"comments": false,
"strings": true
},
"editor.autoIndent": "full"
},
"[cschleiden.vscode-github-actions]": {
"editor.insertSpaces": true,
"editor.tabSize": 2,
"editor.quickSuggestions": {
"other": true,
"comments": false,
"strings": true
},
"editor.autoIndent": "full"
},
"files.associations": {
".github/**/*.yml": "cschleiden.vscode-github-actions"
}
}
================================================
FILE: .vscode/tasks.json
================================================
{
"version": "2.0.0",
"tasks": [
{
"label": "build-wasm",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/e2e/Uno/HelloWorld.Wasm/HelloWorld.Wasm.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish-wasm",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/e2e/Uno/HelloWorld.Wasm/HelloWorld.Wasm.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "build-skia-gtk",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/e2e/Uno/HelloWorld.Skia.Gtk/HelloWorld.Skia.Gtk.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish-skia-gtk",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/e2e/Uno/HelloWorld.Skia.Gtk/HelloWorld.Skia.Gtk.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
}
================================================
FILE: Clean-Outputs.ps1
================================================
Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
Get-ChildItem .\ -include .mfractor -Attributes Hidden -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
Get-ChildItem .\ -include .vs -Attributes Hidden -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
Get-ChildItem .\ -include *.csproj.user -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
================================================
FILE: CodeCoverage.runsettings
================================================
.*Prism.*\.dll$.*Tests.*
================================================
FILE: Directory.Build.props
================================================
enBrian Lagunas;Dan Siegelhttps://github.com/PrismLibrary/PrismLICENSEprism-logo.pngtruegithttps://github.com/PrismLibrary/PrismTrueTrue$(MSBuildThisFileDirectory)Artifacts$([System.Text.RegularExpressions.Regex]::Escape('$(MSBuildThisFileDirectory)'))$([System.Text.RegularExpressions.Regex]::Replace('$(MSBuildProjectFullPath)', '$(EscapedCurrentDirectory)', ''))$(MSBuildThisFileDirectory)images/prism-logo.png$(MSBuildThisFileDirectory)LICENSElatest
System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute;
System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes;
System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute;
System.Runtime.CompilerServices.IsExternalInit;
$(WarningsAsErrors);IDE0003enabletrue$(NoWarn);NU5104;NU5100;NU5118;NU5123;NU1603;CS1701;CS1702;XA0101;MSB3277;CS8785;CS8669;CS1998;NU1507falsetrue$(MSBuildProjectName.Contains('Test'))$(MSBuildProjectName.Contains('Wpf'))$(MSBuildProjectName.Contains('Uno'))$(MSBuildProjectName.Contains('Forms'))$(MSBuildProjectName.Contains('Maui'))$(MSBuildProjectName.Contains('Avalonia'))True$(MSBuildThisFileDirectory)prism.snkFalsefalsefalsefalsefalsefalseprism;wpf;xamarin;xamlprism;mvvm;wpf;dependency injection;diprism;mvvm;winui;uno-platform;xamarin;webassembly;android;ios;macos;dependency injection;diprism;mvvm;uwp;android;ios;xamarin;xamarin.forms;dependency injection;diprism;mvvm;axaml;xaml;desktop;navigation;prismavalonia;dialog;linux;macos;avalonia;dependency injection;difalsefalse$(IsWpfProject)$(IsMauiProject)3.0.44$(DefineConstants);WPF$(DefineConstants);UNO_WINUI$(DefineConstants);UNO_WASM$(DefineConstants);AVALONIAhttps://github.com/PrismLibrary/Prism/releases/tag/$(Version)$(DefineConstants);__ANDROID__21.014.210.1414.0true10.0.18362.010.0.18362.0allruntime; build; native; contentfiles; analyzersallruntime; build; native; contentfiles; analyzersallruntime; build; native; contentfiles; analyzers
================================================
FILE: Directory.Build.targets
================================================
$(AssemblyName) ($(TargetFramework))snupkgtruetrue$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb
================================================
FILE: Directory.Packages.props
================================================
================================================
FILE: LICENSE
================================================
Prism can be licensed either under the Prism Community License or the Prism Commercial license.
To be qualified for the Prism Community License you must have an annual gross revenue of less than one (1) million U.S. dollars ($1,000,000.00 USD) per year or have never received more than $3 million USD in capital from an outside source, such as private equity or venture capital, and agree to be bound by Prism's terms and conditions.
Customers who do not qualify for the community license can visit the Prism Library website (https://prismlibrary.com/) for commercial licensing options.
Under no circumstances can you use this product without (1) either a Community License or a Commercial License and (2) without agreeing and abiding by Prism's license containing all terms and conditions.
The Prism license that contains the terms and conditions can be found at
https://cdn.prismlibrary.com/downloads/prism_license.pdf
================================================
FILE: PrismLibrary.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33213.308
MinimumVisualStudioVersion = 15.0.26124.0
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{F3664D7A-6FF5-4D1F-9F5F-26EE87F032D3}"
ProjectSection(SolutionItems) = preProject
src\Directory.Build.props = src\Directory.Build.props
src\Directory.Build.targets = src\Directory.Build.targets
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Core", "src\Prism.Core\Prism.Core.csproj", "{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{00FFDC13-7397-46F1-897E-A62A7575D28A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Core.Tests", "tests\Prism.Core.Tests\Prism.Core.Tests.csproj", "{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Wpf", "Wpf", "{C2BA93F6-D2E1-455F-B9FA-6221D087295E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Wpf", "src\Wpf\Prism.Wpf\Prism.Wpf.csproj", "{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Wpf", "src\Wpf\Prism.DryIoc.Wpf\Prism.DryIoc.Wpf.csproj", "{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Unity.Wpf", "src\Wpf\Prism.Unity.Wpf\Prism.Unity.Wpf.csproj", "{E9A2458B-999D-4D36-822F-663D3830575A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Wpf", "Wpf", "{F1F91777-01EA-43A3-A3ED-D473B382F46C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Wpf.Tests", "tests\Wpf\Prism.Wpf.Tests\Prism.Wpf.Tests.csproj", "{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Wpf.Tests", "tests\Wpf\Prism.DryIoc.Wpf.Tests\Prism.DryIoc.Wpf.Tests.csproj", "{BA05687E-2317-4A65-805B-C596F52F7203}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Unity.Wpf.Tests", "tests\Wpf\Prism.Unity.Wpf.Tests\Prism.Unity.Wpf.Tests.csproj", "{367BE810-5B34-4894-BE47-1C8DCC67DE81}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.IocContainer.Wpf.Tests.Support", "tests\Wpf\Prism.IocContainer.Wpf.Tests.Support\Prism.IocContainer.Wpf.Tests.Support.csproj", "{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{10DFE0CA-4F29-4859-B60F-94073D43FB51}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
.gitignore = .gitignore
CodeCoverage.runsettings = CodeCoverage.runsettings
Directory.Build.props = Directory.Build.props
Directory.build.targets = Directory.build.targets
Directory.Packages.props = Directory.Packages.props
global.json = global.json
xunit.runner.json = xunit.runner.json
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Uno", "Uno", "{8F959801-D494-4CAF-9437-90F30472E169}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Prism.Container.Wpf.Shared", "tests\Wpf\Prism.Container.Wpf.Shared\Prism.Container.Wpf.Shared.shproj", "{BD42A7D6-A84D-4D27-9C28-7F6A2EC477F1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Uno.WinUI", "src\Uno\Prism.Uno\Prism.Uno.WinUI.csproj", "{E74664C1-1BB1-4920-8099-2C9125CFD00B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Uno.WinUI", "src\Uno\Prism.DryIoc.Uno\Prism.DryIoc.Uno.WinUI.csproj", "{DB530D15-0556-4B6F-96B2-1497C8DF08D6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Maui", "Maui", "{24639CEB-266D-40E1-B0A8-B78BB6F8CEF8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Maui", "src\Maui\Prism.Maui\Prism.Maui.csproj", "{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Maui.Rx", "src\Maui\Prism.Maui.Rx\Prism.Maui.Rx.csproj", "{D7B41D0E-CBE4-4846-992F-C955CE45DC08}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Maui", "src\Maui\Prism.DryIoc.Maui\Prism.DryIoc.Maui.csproj", "{60D92138-66AC-4DC9-973D-FDD917F87112}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Maui", "Maui", "{540CEEC1-D541-4614-BF0B-18056A83E434}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Maui.Tests", "tests\Maui\Prism.Maui.Tests\Prism.Maui.Tests.csproj", "{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Maui.Tests", "tests\Maui\Prism.DryIoc.Maui.Tests\Prism.DryIoc.Maui.Tests.csproj", "{8711D306-1118-4A11-9399-EF14AA13015E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Events", "src\Prism.Events\Prism.Events.csproj", "{8610485A-BE9F-4938-86D4-E9F1FA1739A0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Uno.WinUI.Markup", "src\Uno\Prism.Uno.Markup\Prism.Uno.WinUI.Markup.csproj", "{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Avalonia", "Avalonia", "{8AE1015F-4D62-47EF-A576-2F7411EC20D5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Avalonia", "src\Avalonia\Prism.Avalonia\Prism.Avalonia.csproj", "{C505C63F-99E6-464F-8C83-1AE4239C19B1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Avalonia", "src\Avalonia\Prism.DryIoc.Avalonia\Prism.DryIoc.Avalonia.csproj", "{A6B7B19C-3288-4CD2-A737-527BEB1ED807}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Avalonia.Tests", "tests\Avalonia\Prism.Avalonia.Tests\Prism.Avalonia.Tests.csproj", "{AB501F63-8E8C-4333-8A15-81BA02F3C703}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Prism.Container.Avalonia.Shared", "tests\Avalonia\Prism.Container.Avalonia.Shared\Prism.Container.Avalonia.Shared.shproj", "{6FDA7D49-DF44-4E8F-A182-0EB73DD3C452}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Avalonia.Tests", "tests\Avalonia\Prism.DryIoc.Avalonia.Tests\Prism.DryIoc.Avalonia.Tests.csproj", "{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.IocContainer.Avalonia.Tests.Support", "tests\Avalonia\Prism.IocContainer.Avalonia.Tests.Support\Prism.IocContainer.Avalonia.Tests.Support.csproj", "{887E0794-798D-4127-847E-6F68D5C9B334}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Avalonia", "Avalonia", "{904D5094-55F9-4581-90AC-D6C1131F8152}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Debug|x64.ActiveCfg = Debug|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Debug|x64.Build.0 = Debug|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Debug|x86.ActiveCfg = Debug|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Debug|x86.Build.0 = Debug|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Release|Any CPU.Build.0 = Release|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Release|x64.ActiveCfg = Release|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Release|x64.Build.0 = Release|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Release|x86.ActiveCfg = Release|Any CPU
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF}.Release|x86.Build.0 = Release|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Debug|x64.ActiveCfg = Debug|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Debug|x64.Build.0 = Debug|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Debug|x86.ActiveCfg = Debug|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Debug|x86.Build.0 = Debug|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Release|Any CPU.Build.0 = Release|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Release|x64.ActiveCfg = Release|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Release|x64.Build.0 = Release|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Release|x86.ActiveCfg = Release|Any CPU
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A}.Release|x86.Build.0 = Release|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Debug|x64.ActiveCfg = Debug|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Debug|x64.Build.0 = Debug|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Debug|x86.ActiveCfg = Debug|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Debug|x86.Build.0 = Debug|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Release|Any CPU.Build.0 = Release|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Release|x64.ActiveCfg = Release|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Release|x64.Build.0 = Release|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Release|x86.ActiveCfg = Release|Any CPU
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF}.Release|x86.Build.0 = Release|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Debug|x64.ActiveCfg = Debug|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Debug|x64.Build.0 = Debug|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Debug|x86.ActiveCfg = Debug|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Debug|x86.Build.0 = Debug|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Release|Any CPU.Build.0 = Release|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Release|x64.ActiveCfg = Release|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Release|x64.Build.0 = Release|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Release|x86.ActiveCfg = Release|Any CPU
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2}.Release|x86.Build.0 = Release|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Debug|x64.ActiveCfg = Debug|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Debug|x64.Build.0 = Debug|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Debug|x86.ActiveCfg = Debug|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Debug|x86.Build.0 = Debug|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Release|Any CPU.Build.0 = Release|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Release|x64.ActiveCfg = Release|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Release|x64.Build.0 = Release|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Release|x86.ActiveCfg = Release|Any CPU
{E9A2458B-999D-4D36-822F-663D3830575A}.Release|x86.Build.0 = Release|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Debug|x64.ActiveCfg = Debug|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Debug|x64.Build.0 = Debug|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Debug|x86.ActiveCfg = Debug|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Debug|x86.Build.0 = Debug|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Release|Any CPU.Build.0 = Release|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Release|x64.ActiveCfg = Release|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Release|x64.Build.0 = Release|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Release|x86.ActiveCfg = Release|Any CPU
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA}.Release|x86.Build.0 = Release|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Debug|x64.ActiveCfg = Debug|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Debug|x64.Build.0 = Debug|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Debug|x86.ActiveCfg = Debug|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Debug|x86.Build.0 = Debug|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Release|Any CPU.Build.0 = Release|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Release|x64.ActiveCfg = Release|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Release|x64.Build.0 = Release|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Release|x86.ActiveCfg = Release|Any CPU
{BA05687E-2317-4A65-805B-C596F52F7203}.Release|x86.Build.0 = Release|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Debug|Any CPU.Build.0 = Debug|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Debug|x64.ActiveCfg = Debug|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Debug|x64.Build.0 = Debug|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Debug|x86.ActiveCfg = Debug|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Debug|x86.Build.0 = Debug|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Release|Any CPU.ActiveCfg = Release|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Release|Any CPU.Build.0 = Release|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Release|x64.ActiveCfg = Release|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Release|x64.Build.0 = Release|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Release|x86.ActiveCfg = Release|Any CPU
{367BE810-5B34-4894-BE47-1C8DCC67DE81}.Release|x86.Build.0 = Release|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Debug|x64.ActiveCfg = Debug|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Debug|x64.Build.0 = Debug|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Debug|x86.ActiveCfg = Debug|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Debug|x86.Build.0 = Debug|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Release|Any CPU.Build.0 = Release|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Release|x64.ActiveCfg = Release|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Release|x64.Build.0 = Release|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Release|x86.ActiveCfg = Release|Any CPU
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7}.Release|x86.Build.0 = Release|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Debug|x64.ActiveCfg = Debug|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Debug|x64.Build.0 = Debug|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Debug|x86.ActiveCfg = Debug|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Debug|x86.Build.0 = Debug|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Release|Any CPU.Build.0 = Release|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Release|x64.ActiveCfg = Release|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Release|x64.Build.0 = Release|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Release|x86.ActiveCfg = Release|Any CPU
{E74664C1-1BB1-4920-8099-2C9125CFD00B}.Release|x86.Build.0 = Release|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Debug|x64.ActiveCfg = Debug|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Debug|x64.Build.0 = Debug|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Debug|x86.ActiveCfg = Debug|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Debug|x86.Build.0 = Debug|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Release|Any CPU.Build.0 = Release|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Release|x64.ActiveCfg = Release|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Release|x64.Build.0 = Release|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Release|x86.ActiveCfg = Release|Any CPU
{DB530D15-0556-4B6F-96B2-1497C8DF08D6}.Release|x86.Build.0 = Release|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Debug|x64.ActiveCfg = Debug|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Debug|x64.Build.0 = Debug|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Debug|x86.ActiveCfg = Debug|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Debug|x86.Build.0 = Debug|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Release|Any CPU.Build.0 = Release|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Release|x64.ActiveCfg = Release|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Release|x64.Build.0 = Release|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Release|x86.ActiveCfg = Release|Any CPU
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A}.Release|x86.Build.0 = Release|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Debug|x64.ActiveCfg = Debug|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Debug|x64.Build.0 = Debug|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Debug|x86.ActiveCfg = Debug|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Debug|x86.Build.0 = Debug|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Release|Any CPU.Build.0 = Release|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Release|x64.ActiveCfg = Release|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Release|x64.Build.0 = Release|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Release|x86.ActiveCfg = Release|Any CPU
{D7B41D0E-CBE4-4846-992F-C955CE45DC08}.Release|x86.Build.0 = Release|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Debug|x64.ActiveCfg = Debug|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Debug|x64.Build.0 = Debug|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Debug|x86.ActiveCfg = Debug|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Debug|x86.Build.0 = Debug|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Release|Any CPU.Build.0 = Release|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Release|x64.ActiveCfg = Release|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Release|x64.Build.0 = Release|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Release|x86.ActiveCfg = Release|Any CPU
{60D92138-66AC-4DC9-973D-FDD917F87112}.Release|x86.Build.0 = Release|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Debug|x64.ActiveCfg = Debug|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Debug|x64.Build.0 = Debug|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Debug|x86.ActiveCfg = Debug|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Debug|x86.Build.0 = Debug|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Release|Any CPU.Build.0 = Release|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Release|x64.ActiveCfg = Release|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Release|x64.Build.0 = Release|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Release|x86.ActiveCfg = Release|Any CPU
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7}.Release|x86.Build.0 = Release|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Debug|x64.ActiveCfg = Debug|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Debug|x64.Build.0 = Debug|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Debug|x86.ActiveCfg = Debug|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Debug|x86.Build.0 = Debug|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Release|Any CPU.Build.0 = Release|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Release|x64.ActiveCfg = Release|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Release|x64.Build.0 = Release|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Release|x86.ActiveCfg = Release|Any CPU
{8711D306-1118-4A11-9399-EF14AA13015E}.Release|x86.Build.0 = Release|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Debug|x64.ActiveCfg = Debug|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Debug|x64.Build.0 = Debug|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Debug|x86.ActiveCfg = Debug|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Debug|x86.Build.0 = Debug|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Release|Any CPU.Build.0 = Release|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Release|x64.ActiveCfg = Release|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Release|x64.Build.0 = Release|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Release|x86.ActiveCfg = Release|Any CPU
{8610485A-BE9F-4938-86D4-E9F1FA1739A0}.Release|x86.Build.0 = Release|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Debug|x64.ActiveCfg = Debug|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Debug|x64.Build.0 = Debug|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Debug|x86.ActiveCfg = Debug|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Debug|x86.Build.0 = Debug|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Release|Any CPU.Build.0 = Release|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Release|x64.ActiveCfg = Release|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Release|x64.Build.0 = Release|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Release|x86.ActiveCfg = Release|Any CPU
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D}.Release|x86.Build.0 = Release|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Debug|x64.ActiveCfg = Debug|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Debug|x64.Build.0 = Debug|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Debug|x86.ActiveCfg = Debug|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Debug|x86.Build.0 = Debug|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Release|Any CPU.Build.0 = Release|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Release|x64.ActiveCfg = Release|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Release|x64.Build.0 = Release|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Release|x86.ActiveCfg = Release|Any CPU
{C505C63F-99E6-464F-8C83-1AE4239C19B1}.Release|x86.Build.0 = Release|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Debug|x64.ActiveCfg = Debug|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Debug|x64.Build.0 = Debug|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Debug|x86.ActiveCfg = Debug|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Debug|x86.Build.0 = Debug|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Release|Any CPU.Build.0 = Release|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Release|x64.ActiveCfg = Release|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Release|x64.Build.0 = Release|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Release|x86.ActiveCfg = Release|Any CPU
{A6B7B19C-3288-4CD2-A737-527BEB1ED807}.Release|x86.Build.0 = Release|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Debug|x64.ActiveCfg = Debug|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Debug|x64.Build.0 = Debug|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Debug|x86.ActiveCfg = Debug|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Debug|x86.Build.0 = Debug|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Release|Any CPU.Build.0 = Release|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Release|x64.ActiveCfg = Release|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Release|x64.Build.0 = Release|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Release|x86.ActiveCfg = Release|Any CPU
{AB501F63-8E8C-4333-8A15-81BA02F3C703}.Release|x86.Build.0 = Release|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Debug|x64.ActiveCfg = Debug|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Debug|x64.Build.0 = Debug|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Debug|x86.ActiveCfg = Debug|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Debug|x86.Build.0 = Debug|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Release|Any CPU.Build.0 = Release|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Release|x64.ActiveCfg = Release|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Release|x64.Build.0 = Release|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Release|x86.ActiveCfg = Release|Any CPU
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF}.Release|x86.Build.0 = Release|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Debug|Any CPU.Build.0 = Debug|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Debug|x64.ActiveCfg = Debug|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Debug|x64.Build.0 = Debug|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Debug|x86.ActiveCfg = Debug|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Debug|x86.Build.0 = Debug|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Release|Any CPU.ActiveCfg = Release|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Release|Any CPU.Build.0 = Release|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Release|x64.ActiveCfg = Release|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Release|x64.Build.0 = Release|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Release|x86.ActiveCfg = Release|Any CPU
{887E0794-798D-4127-847E-6F68D5C9B334}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{F634CA1E-9237-4E69-B23C-91AA6FBCABFF} = {F3664D7A-6FF5-4D1F-9F5F-26EE87F032D3}
{8D85E3BC-6DD8-4F71-93DA-ABE51252CA2A} = {00FFDC13-7397-46F1-897E-A62A7575D28A}
{C2BA93F6-D2E1-455F-B9FA-6221D087295E} = {F3664D7A-6FF5-4D1F-9F5F-26EE87F032D3}
{CE80554B-E37B-4B52-AA80-1F96DA1AC3EF} = {C2BA93F6-D2E1-455F-B9FA-6221D087295E}
{0C8AAB85-387C-41D2-ABCE-BAFAF74B62B2} = {C2BA93F6-D2E1-455F-B9FA-6221D087295E}
{E9A2458B-999D-4D36-822F-663D3830575A} = {C2BA93F6-D2E1-455F-B9FA-6221D087295E}
{F1F91777-01EA-43A3-A3ED-D473B382F46C} = {00FFDC13-7397-46F1-897E-A62A7575D28A}
{C4D210AF-C91E-4310-ADE5-881A7DFE8AAA} = {F1F91777-01EA-43A3-A3ED-D473B382F46C}
{BA05687E-2317-4A65-805B-C596F52F7203} = {F1F91777-01EA-43A3-A3ED-D473B382F46C}
{367BE810-5B34-4894-BE47-1C8DCC67DE81} = {F1F91777-01EA-43A3-A3ED-D473B382F46C}
{2E8F565D-9D13-424E-BD86-C5A362F9AAE7} = {F1F91777-01EA-43A3-A3ED-D473B382F46C}
{8F959801-D494-4CAF-9437-90F30472E169} = {F3664D7A-6FF5-4D1F-9F5F-26EE87F032D3}
{BD42A7D6-A84D-4D27-9C28-7F6A2EC477F1} = {F1F91777-01EA-43A3-A3ED-D473B382F46C}
{E74664C1-1BB1-4920-8099-2C9125CFD00B} = {8F959801-D494-4CAF-9437-90F30472E169}
{DB530D15-0556-4B6F-96B2-1497C8DF08D6} = {8F959801-D494-4CAF-9437-90F30472E169}
{24639CEB-266D-40E1-B0A8-B78BB6F8CEF8} = {F3664D7A-6FF5-4D1F-9F5F-26EE87F032D3}
{BC84ABD6-A230-4367-8E6A-85B6BA1D851A} = {24639CEB-266D-40E1-B0A8-B78BB6F8CEF8}
{D7B41D0E-CBE4-4846-992F-C955CE45DC08} = {24639CEB-266D-40E1-B0A8-B78BB6F8CEF8}
{60D92138-66AC-4DC9-973D-FDD917F87112} = {24639CEB-266D-40E1-B0A8-B78BB6F8CEF8}
{540CEEC1-D541-4614-BF0B-18056A83E434} = {00FFDC13-7397-46F1-897E-A62A7575D28A}
{7A1E157F-D4CD-4E6B-9CE3-1894EB2A15A7} = {540CEEC1-D541-4614-BF0B-18056A83E434}
{8711D306-1118-4A11-9399-EF14AA13015E} = {540CEEC1-D541-4614-BF0B-18056A83E434}
{8610485A-BE9F-4938-86D4-E9F1FA1739A0} = {F3664D7A-6FF5-4D1F-9F5F-26EE87F032D3}
{0EA416B6-0AB6-464B-9F4D-206FFCFB262D} = {8F959801-D494-4CAF-9437-90F30472E169}
{8AE1015F-4D62-47EF-A576-2F7411EC20D5} = {F3664D7A-6FF5-4D1F-9F5F-26EE87F032D3}
{C505C63F-99E6-464F-8C83-1AE4239C19B1} = {8AE1015F-4D62-47EF-A576-2F7411EC20D5}
{A6B7B19C-3288-4CD2-A737-527BEB1ED807} = {8AE1015F-4D62-47EF-A576-2F7411EC20D5}
{AB501F63-8E8C-4333-8A15-81BA02F3C703} = {904D5094-55F9-4581-90AC-D6C1131F8152}
{6FDA7D49-DF44-4E8F-A182-0EB73DD3C452} = {904D5094-55F9-4581-90AC-D6C1131F8152}
{03B9C775-9582-409F-B67F-6B8A0CE0C7AF} = {904D5094-55F9-4581-90AC-D6C1131F8152}
{887E0794-798D-4127-847E-6F68D5C9B334} = {904D5094-55F9-4581-90AC-D6C1131F8152}
{904D5094-55F9-4581-90AC-D6C1131F8152} = {00FFDC13-7397-46F1-897E-A62A7575D28A}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C7433AE2-B1A0-4C1A-887E-5CAA7AAF67A6}
EndGlobalSection
GlobalSection(SharedMSBuildProjectFiles) = preSolution
tests\Avalonia\Prism.Container.Avalonia.Shared\Prism.Container.Avalonia.Shared.projitems*{03b9c775-9582-409f-b67f-6b8a0ce0c7af}*SharedItemsImports = 5
tests\Wpf\Prism.Container.Wpf.Shared\Prism.Container.Wpf.Shared.projitems*{367be810-5b34-4894-be47-1c8dcc67de81}*SharedItemsImports = 5
tests\Avalonia\Prism.Container.Avalonia.Shared\Prism.Container.Avalonia.Shared.projitems*{6fda7d49-df44-4e8f-a182-0eb73dd3c452}*SharedItemsImports = 13
tests\Wpf\Prism.Container.Wpf.Shared\Prism.Container.Wpf.Shared.projitems*{ba05687e-2317-4a65-805b-c596f52f7203}*SharedItemsImports = 5
tests\Wpf\Prism.Container.Wpf.Shared\Prism.Container.Wpf.Shared.projitems*{bd42a7d6-a84d-4d27-9c28-7f6a2ec477f1}*SharedItemsImports = 13
EndGlobalSection
EndGlobal
================================================
FILE: PrismLibrary_Avalonia.slnf
================================================
{
"solution": {
"path": "PrismLibrary.sln",
"projects": [
"src\\Avalonia\\Prism.Avalonia\\Prism.Avalonia.csproj",
"src\\Avalonia\\Prism.DryIoc.Avalonia\\Prism.DryIoc.Avalonia.csproj",
"src\\Prism.Core\\Prism.Core.csproj",
"src\\Prism.Events\\Prism.Events.csproj",
"tests\\Avalonia\\Prism.Avalonia.Tests\\Prism.Avalonia.Tests.csproj",
"tests\\Avalonia\\Prism.Container.Avalonia.Shared\\Prism.Container.Avalonia.Shared.shproj",
"tests\\Avalonia\\Prism.DryIoc.Avalonia.Tests\\Prism.DryIoc.Avalonia.Tests.csproj",
"tests\\Avalonia\\Prism.IocContainer.Avalonia.Tests.Support\\Prism.IocContainer.Avalonia.Tests.Support.csproj",
"tests\\Prism.Core.Tests\\Prism.Core.Tests.csproj"
]
}
}
================================================
FILE: PrismLibrary_Core.slnf
================================================
{
"solution": {
"path": "PrismLibrary.sln",
"projects": [
"src\\Prism.Core\\Prism.Core.csproj",
"src\\Prism.Events\\Prism.Events.csproj",
"tests\\Prism.Core.Tests\\Prism.Core.Tests.csproj"
]
}
}
================================================
FILE: PrismLibrary_Maui.slnf
================================================
{
"solution": {
"path": "PrismLibrary.sln",
"projects": [
"src\\Maui\\Prism.DryIoc.Maui\\Prism.DryIoc.Maui.csproj",
"src\\Maui\\Prism.Maui.Rx\\Prism.Maui.Rx.csproj",
"src\\Maui\\Prism.Maui\\Prism.Maui.csproj",
"src\\Prism.Core\\Prism.Core.csproj",
"src\\Prism.Events\\Prism.Events.csproj",
"tests\\Maui\\Prism.DryIoc.Maui.Tests\\Prism.DryIoc.Maui.Tests.csproj",
"tests\\Maui\\Prism.Maui.Tests\\Prism.Maui.Tests.csproj",
"tests\\Prism.Core.Tests\\Prism.Core.Tests.csproj"
]
}
}
================================================
FILE: PrismLibrary_Uno.slnf
================================================
{
"solution": {
"path": "PrismLibrary.sln",
"projects": [
"src\\Prism.Core\\Prism.Core.csproj",
"src\\Prism.Events\\Prism.Events.csproj",
"src\\Uno\\Prism.DryIoc.Uno\\Prism.DryIoc.Uno.WinUI.csproj",
"src\\Uno\\Prism.Uno\\Prism.Uno.WinUI.csproj",
"src\\Uno\\Prism.Uno.Markup\\Prism.Uno.WinUI.Markup.csproj",
"tests\\Prism.Core.Tests\\Prism.Core.Tests.csproj"
]
}
}
================================================
FILE: PrismLibrary_Wpf.slnf
================================================
{
"solution": {
"path": "PrismLibrary.sln",
"projects": [
"src\\Prism.Core\\Prism.Core.csproj",
"src\\Prism.Events\\Prism.Events.csproj",
"src\\Wpf\\Prism.DryIoc.Wpf\\Prism.DryIoc.Wpf.csproj",
"src\\Wpf\\Prism.Unity.Wpf\\Prism.Unity.Wpf.csproj",
"src\\Wpf\\Prism.Wpf\\Prism.Wpf.csproj",
"tests\\Prism.Core.Tests\\Prism.Core.Tests.csproj",
"tests\\Wpf\\Prism.Container.Wpf.Shared\\Prism.Container.Wpf.Shared.shproj",
"tests\\Wpf\\Prism.DryIoc.Wpf.Tests\\Prism.DryIoc.Wpf.Tests.csproj",
"tests\\Wpf\\Prism.IocContainer.Wpf.Tests.Support\\Prism.IocContainer.Wpf.Tests.Support.csproj",
"tests\\Wpf\\Prism.Unity.Wpf.Tests\\Prism.Unity.Wpf.Tests.csproj",
"tests\\Wpf\\Prism.Wpf.Tests\\Prism.Wpf.Tests.csproj"
]
}
}
================================================
FILE: README.md
================================================
# Prism
Prism is a framework for building loosely coupled, maintainable, and testable XAML applications in WPF, Avalonia, MAUI, Uno Platform and WinUI. Separate releases are available for each platform and those will be developed on independent timelines. Prism provides an implementation of a collection of design patterns that are helpful in writing well-structured and maintainable XAML applications, including MVVM, dependency injection, commands, EventAggregator, and others. Prism's core functionality is a shared code base supported in .NET Standard 2.0, .NET Framework 4.6 / 4.7, and .NET6.0/.NET8.0. Those things that need to be platform specific are implemented in the respective libraries for the target platform. Prism also provides great integration of these patterns with the target platform.
## Licensing
The Prism Team would first and foremost like to thank all of those developers who have stepped up over the past 4 years with GitHub Sponsors. We are committed to ensuring the longevity and success of the Prism Library. As a result Prism 9.0 is now [Dual License](LICENSE). We continue to offer a FREE Community License for the vast majority of our community, while the Commercial License will now be required by larger organizations to help fund and support the development of Prism. We additionally have the Commercial Plus License which grants access to a number of additional support libraries that build on top of Prism as well as a private Discord channel where you can ask questions and interact with the Prism Team.
## Build Status
| | Status |
| -------- | ------ |
| Full Build | [](https://github.com/PrismLibrary/Prism/actions/workflows/ci.yml) |
| Prism.Core | [](https://github.com/PrismLibrary/Prism/actions/workflows/build_core.yml) |
| Prism.Wpf | [](https://github.com/PrismLibrary/Prism/actions/workflows/build_wpf.yml) |
| Prism.Avalonia | [](https://github.com/PrismLibrary/Prism/actions/workflows/build_avalonia.yml) |
| Prism.Uno | [](https://github.com/PrismLibrary/Prism/actions/workflows/build_uno.yml) |
| Prism.Maui | [](https://github.com/PrismLibrary/Prism/actions/workflows/build_maui.yml) |
## Support
- Documentation is maintained in [the Prism-Documentation repo](https://github.com/PrismLibrary/Prism-Documentation) under /docs and can be found in a readable format on [the website](https://docs.prismlibrary.com/).
- StackOverflow: **NOTE** The Prism Team no longer supports or engages with questions posted on StackOverflow. Questions posted there may or may not receive correct answers.
- For general questions and support, post your questions in [GitHub Discussions](https://github.com/PrismLibrary/Prism/discussions).
- You can enter bugs and feature requests in our [Issues](https://github.com/PrismLibrary/Prism/issues/new/choose).
- Enterprise Support: If you are interested in Enterprise Support please email the Prism Team at
## Videos & Training
By watching our courses, not only do you help support the project financially, but you might also learn something along the way. We believe this is a win-win for everyone.
- [Introduction to Prism for WPF (NEW)](https://pluralsight.pxf.io/bE3rB)
- [Introduction to Prism (Legacy)](https://pluralsight.pxf.io/W1Dz3)
- [What's New in Prism 5.0](https://pluralsight.pxf.io/z7avm)
- [Prism Problems & Solutions: Showing Multiple Shells](https://pluralsight.pxf.io/XVxR5)
- [Prism Problems & Solutions: Mastering TabControl](https://pluralsight.pxf.io/B6X99)
- [Prism Problems & Solutions: Loading Modules Based on User Roles](https://pluralsight.pxf.io/GvjkE)
- [Prism Problems & Solutions: Loading Dependent Views](https://pluralsight.pxf.io/a01zj)
We appreciate your support.
## NuGet Packages
Official Prism releases are available on NuGet. Prism packages are also available on the private Commercial Plus Feed which will be updated with each merged PR. If you want to take advantage of a new feature as soon as it's merged into the code base, or if there is a critical bug you need fixed we invite you to purchase the Commercial Plus License to take advantage of these packages.
### Core Packages
These are the base packages for each platform, together with the Prism's Core assembly as a cross-platform PCL.
| Platform | Package | NuGet | Commercial Plus Feed |
| -------- | ------- | ------- | ----- |
| Cross Platform | [Prism.Core][CoreNuGet] | [![CoreNuGetShield]][CoreNuGet] | [![CorePrismNuGetShield]][CorePrismNuGet] |
| Cross Platform | [Prism.Events][EventsNuGet] | [![EventsNuGetShield]][EventsNuGet] | [![EventsPrismNuGetShield]][CorePrismNuGet] |
| Cross Platform | [Prism.Container.Abstractions][ContainerAbstractionsNuGet] | [![ContainerAbstractionsNuGetShield]][ContainerAbstractionsNuGet] | [![ContainerAbstractionsPrismNuGetShield]][CorePrismNuGet] |
| Cross Platform | [Prism.Container.DryIoc][ContainerDryIocNuGet] | [![ContainerDryIocNuGetShield]][ContainerDryIocNuGet] | [![ContainerDryIocPrismNuGetShield]][CorePrismNuGet] |
| Cross Platform | [Prism.Container.Unity][ContainerUnityNuGet] | [![ContainerUnityNuGetShield]][ContainerUnityNuGet] | [![ContainerUnityPrismNuGetShield]][CorePrismNuGet] |
| WPF | [Prism.Wpf][WpfNuGet] | [![WpfNuGetShield]][WpfNuGet] | [![WpfPrismNuGetShield]][WpfPrismNuGet] |
| Avalonia | [Prism.Avalonia][AvaloniaNuGet] | [![AvaloniaNuGetShield]][AvaloniaNuGet] | [![AvaloniaPrismNuGetShield]][AvaloniaPrismNuGet] |
| Xamarin.Forms | [Prism.Forms][FormsNuGet] | [![FormsNuGetShield]][FormsNuGet] | [![FormsPrismNuGetShield]][FormsPrismNuGet] |
| Uno Platform and WinUI | [Prism.Uno][UnoNuGet] | [![UnoNuGetShield]][UnoNuGet] | [![UnoPrismNuGetShield]][UnoPrismNuGet] |
### Container-specific packages
Each supported IoC container has its own package assisting in the setup and usage of that container together with Prism. The assembly is named using this convention: Prism.*Container.Platform*.dll, e.g. **Prism.Unity.Wpf.dll**. Starting with version 7.0, Prism is moving to separate packages for each platform. Be sure to install the package for the Container and the Platform of your choice.
#### WPF
| Package | NuGet | Commercial Plus Feed |
|---------|-------|-------|
| [Prism.DryIoc][DryIocWpfNuGet] | [![DryIocWpfNuGetShield]][DryIocWpfNuGet] | [![DryIocWpfPrismNuGetShield]][DryIocWpfPrismNuGet] |
| [Prism.Unity][UnityWpfNuGet] | [![UnityWpfNuGetShield]][UnityWpfNuGet] | [![UnityWpfPrismNuGetShield]][UnityWpfPrismNuGet] |
#### Avalonia
| Package | NuGet | Commercial Plus Feed |
|---------|-------|-------|
| [Prism.DryIoc.Avalonia][DryIocAvaloniaNuGet] | [![DryIocAvaloniaNuGetShield]][DryIocAvaloniaNuGet] | [![DryIocAvaloniaPrismNuGetShield]][DryIocAvaloniaPrismNuGet] |
#### Xamarin Forms
| Package | NuGet | Commercial Plus Feed |
|---------|-------|-------|
| [Prism.DryIoc.Forms][DryIocFormsNuGet] | [![DryIocFormsNuGetShield]][DryIocFormsNuGet] | [![DryIocFormsPrismNuGetShield]][DryIocFormsPrismNuGet] |
| [Prism.Unity.Forms][UnityFormsNuGet] | [![UnityFormsNuGetShield]][UnityFormsNuGet] | [![UnityFormsPrismNuGetShield]][UnityFormsPrismNuGet] |
| [Prism.Forms.Regions][PrismFormsRegionsNuget] | [![PrismFormsRegionsNuGetShield]][PrismFormsRegionsNuGet] | [![PrismFormsRegionsPrismNuGetShield]][PrismFormsRegionsPrismNuGet] |
#### Uno Platform
| Package | NuGet | Commercial Plus Feed |
|---------|-------|-------|
| [Prism.DryIoc.Uno][DryIocUnoPlatformNuGet] | [![DryIocUnoPlatformNuGetShield]][DryIocUnoPlatformNuGet] | [![DryIocUnoPlatformPrismNuGetShield]][DryIocUnoPlatformPrismNuGet] |

A detailed overview of each assembly per package is available [here](http://prismlibrary.github.io/docs/getting-started/NuGet-Packages.html).
## Samples
For stable samples be sure to check out the samples repo for the platform you are most interested in.
- [Prism for WPF Samples](https://github.com/PrismLibrary/Prism-Samples-Wpf)
- [Prism for Xamarim.Forms](https://github.com/PrismLibrary/Prism-Samples-Forms)
- [Prism for Uno Platform](#) (Coming soon)
- [Prism for .NET MAUI](#) (Coming soon)
- [Prism for Avalonia](https://github.com/AvaloniaCommunity/Prism.Avalonia/tree/develop/e2e)
## Contributing
We strongly encourage you to get involved and help us evolve the code base.
- You can see what our expectations are for pull requests [here](https://github.com/PrismLibrary/Prism/blob/master/.github/CONTRIBUTING.md).
[CoreNuGet]: https://www.nuget.org/packages/Prism.Core/
[EventsNuGet]: https://www.nuget.org/packages/Prism.Events/
[ContainerAbstractionsNuGet]: https://www.nuget.org/packages/Prism.Container.Abstractions/
[ContainerDryIocNuGet]: https://www.nuget.org/packages/Prism.Container.DryIoc/
[ContainerUnityNuGet]: https://www.nuget.org/packages/Prism.Container.Unity/
[WpfNuGet]: https://www.nuget.org/packages/Prism.Wpf/
[UnoNuGet]: https://www.nuget.org/packages/Prism.Uno.WinUI/
[AvaloniaNuGet]: https://www.nuget.org/packages/Prism.Avalonia/
[FormsNuget]: https://www.nuget.org/packages/Prism.Forms/
[PrismFormsRegionsNuGet]: https://www.nuget.org/packages/Prism.Forms.Regions/
[PrismFormsRegionsPrismNuGet]: #
[PrismFormsRegionsNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Forms.Regions.svg
[PrismFormsRegionsPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Forms.Regions/vpre
[DryIocWpfNuGet]: https://www.nuget.org/packages/Prism.DryIoc/
[UnityWpfNuGet]: https://www.nuget.org/packages/Prism.Unity/
[DryIocUnoPlatformNuGet]: https://www.nuget.org/packages/Prism.DryIoc.Uno.WinUI/
[DryIocAvaloniaNuGet]: https://www.nuget.org/packages/Prism.DryIoc.Avalonia/
[CoreNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Core.svg
[EventsNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Events.svg
[ContainerAbstractionsNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Container.Abstractions.svg
[ContainerDryIocNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Container.DryIoc.svg
[ContainerUnityNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Container.Unity.svg
[WpfNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Wpf.svg
[FormsNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Forms.svg
[UnoNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Uno.WinUI.svg
[DryIocWpfNuGetShield]: https://img.shields.io/nuget/vpre/Prism.DryIoc.svg
[UnityWpfNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Unity.svg
[AvaloniaNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Avalonia.svg
[DryIocAvaloniaNuGetShield]: https://img.shields.io/nuget/vpre/Prism.DryIoc.Avalonia.svg
[DryIocFormsNuGetShield]: https://img.shields.io/nuget/vpre/Prism.DryIoc.Forms.svg
[UnityFormsNuGetShield]: https://img.shields.io/nuget/vpre/Prism.Unity.Forms.svg
[DryIocUnoPlatformNuGetShield]: https://img.shields.io/nuget/vpre/Prism.DryIoc.Uno.WinUI.svg
[CorePrismNuGet]: #
[WpfPrismNuGet]: #
[FormsPrismNuGet]: #
[UnoPrismNuGet]: #
[AvaloniaPrismNuGet]: #
[DryIocWpfPrismNuGet]: #
[UnityWpfPrismNuGet]: #
[UnityFormsPrismNuGet]: #
[DryIocFormsPrismNuGet]: #
[DryIocAvaloniaPrismNuGet]: #
[DryIocUnoPlatformPrismNuGet]: #
[CorePrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Core/vpre
[EventsPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Events/vpre
[ContainerAbstractionsPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Container.Abstractions/vpre
[ContainerDryIocPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Container.DryIoc/vpre
[ContainerUnityPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Container.Unity/vpre
[WpfPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Wpf/vpre
[AvaloniaPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Avalonia/vpre
[UnoPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Uno.WinUI/vpre
[FormsPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Forms/vpre
[DryIocWpfPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.DryIoc/vpre
[UnityWpfPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.Unity/vpre
[DryIocAvaloniaPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.DryIoc.Avalonia/vpre
[DryIocUnoPlatformPrismNuGetShield]: https://nuget.prismlibrary.com/shield/Prism.DryIoc.Uno.WinUI/vpre
[TwitterLogo]: https://dansiegelgithubsponsors.blob.core.windows.net/images/twitter.png
[TwitchLogo]: https://dansiegelgithubsponsors.blob.core.windows.net/images/twitch.png
[YouTubeLogo]: https://dansiegelgithubsponsors.blob.core.windows.net/images/youtube.png
[OctoSponsor]: https://dansiegelgithubsponsors.blob.core.windows.net/images/octosponsor.png
================================================
FILE: build/consolidate-artifacts.ps1
================================================
# Ensure artifacts directory is clean
$executionRoot = Get-Location
$artifactsRoot = $executionRoot, 'artifacts' -join '\'
$nugetRoot = $executionRoot, 'artifacts', 'nuget' -join '\'
Get-ChildItem .\ -Include $nugetRoot -Recurse | ForEach-Object ($_) { Remove-Item $_.Fullname -Force -Recurse }
New-Item -Path $nugetRoot -ItemType Directory -Force > $null
$platforms = @('Forms', 'Wpf', 'Uno', 'Maui')
$core = @("Prism.Core", "Prism.Events", "Prism.dll", "Prism.pdb", "Prism.xml")
$allowedExtensions = @('.dll', '.pdb', '.xml', '.pri', '.nupkg', '.snupkg')
$files = Get-ChildItem -Path $artifactsRoot -Filter "*" -Recurse | Where-Object { (Test-Path -Path $_.FullName -PathType Leaf) -and $_.FullName.StartsWith($nugetRoot) -eq $false -and ($allowedExtensions -contains [System.IO.Path]::GetExtension($_.FullName)) }
if ($files.Count -eq 0)
{
$stringBuilder = New-Object System.Text.StringBuilder
$stringBuilder.AppendLine("Execution Root: $executionRoot")
$stringBuilder.AppendLine("Artifacts:")
Get-ChildItem $artifactsRoot | ForEach-Object { $stringBuilder.AppendLine($_.FullName) }
$stringBuilder.AppendLine("No files found to copy")
Write-Error -Message $stringBuilder.ToString()
exit 1
}
foreach($file in $files)
{
Write-Output "Processing $($file)"
if ($file -match ($platforms -join '|') -and $file -match ($core -join '|'))
{
# Ignore Prism.Core / Prism.Events built with platforms
continue
}
elseif ($file -like "*.nupkg" -or $file -like "*.snupkg")
{
Write-Output "Copying $($file.FullName) to $nugetRoot"
Copy-Item $file.FullName $nugetRoot
}
elseif ($file -like "*.dll" -or $file -like "*.pdb" -or $file -like "*.xml" -or $file -like "*.pri")
{
if($file.FullName-like ($platforms -join '|') -or $file.FullName -like 'Core')
{
continue
}
Write-Output "Getting TFM Directory Name for $($file.FullName)"
$parentDirName = Split-Path -Path (Split-Path -Path $file.FullName -Parent) -Leaf
Write-Output "Determining Copy Path for $parentDirName"
if ((Test-Path -Path $copyPath -PathType Container) -eq $false)
{
Write-Output "Creating $copyPath"
New-Item -Path $copyPath -ItemType Directory -Force > $null
}
Write-Output "Copying $($file.FullName) to $copyPath"
Copy-Item $file.FullName $copyPath
}
}
Get-ChildItem $artifactsRoot | Where-Object { $_.Name -ne 'nuget' } | ForEach-Object { Remove-Item $_.FullName -Force -Recurse }
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/.editorconfig
================================================
# Copyright 2024 Xeno Innovations, Inc.
#
# This EditorConfig file provides consistent coding styles and formatting structure based on
# C# standards by Xeno Innovations for your team's projects while preserving your personal defaults.
#
# For more info:
# https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/code-style-rule-options
#
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true
[*]
# All generic files should use MSDOS style endings, not Unix (lf)
# end_of_line = crlf
indent_style = space
[*.{cs,csx}]
indent_style = space
indent_size = 4
tab_width = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{xml,xaml,axml,axaml}]
indent_style = space
indent_size = 2
charset = utf-8-bom
trim_trailing_whitespace = true
[*.json]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
[*.sln]
indent_size = 2
# Xml project files
[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
# Xml config files
[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
[*.svg]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
# PList Files
[*.plist]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
# YAML files
[*.{yaml,yml}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
# Shell script files
[*.sh]
end_of_line = lf
indent_style = space
indent_size = 2
# Powershell
[*.{ps1,psd1,psm1}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
[*.md]
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
# C# Ruleset
[*.{cs,csx}]
# Indentation preferences
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = false
csharp_indent_labels = one_less_than_current
csharp_indent_switch_labels = true
## Formatting - new line options
### Require braces to be on a new line for (also known as "Allman" style)
### accessors, methods, object_collection, control_blocks, types, properties, lambdas
csharp_new_line_before_open_brace = all
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_between_query_expression_clauses = true
## Spaces
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
# Modifier preferences
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
# Organize Usings
dotnet_separate_import_directive_groups = false
dotnet_sort_system_directives_first = true
file_header_template = unset
# file_header_template = Copyright Xeno Innovations, Inc. 2022\nSee the LICENSE file in the project root for more information.
# this. and Me. preferences
dotnet_style_qualification_for_event = false
dotnet_style_qualification_for_field = false
dotnet_style_qualification_for_method = false
dotnet_style_qualification_for_property = false
# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true
dotnet_style_predefined_type_for_member_access = true
# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
dotnet_style_parentheses_in_other_operators = never_if_unnecessary
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity
# Modifier preferences
dotnet_style_predefined_type_for_locals_parameters_members = true
dotnet_style_require_accessibility_modifiers = for_non_interface_members
dotnet_style_readonly_field = true
# Expression-level preferences
dotnet_style_coalesce_expression = true
dotnet_style_collection_initializer = true
dotnet_style_explicit_tuple_names = true
dotnet_style_namespace_match_folder = true
dotnet_style_null_propagation = true
dotnet_style_object_initializer = true
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_prefer_auto_properties = true
dotnet_style_prefer_compound_assignment = true
dotnet_style_prefer_conditional_expression_over_assignment = true
dotnet_style_prefer_conditional_expression_over_return = true
dotnet_style_prefer_inferred_anonymous_type_member_names = true
dotnet_style_prefer_inferred_tuple_names = true
dotnet_style_prefer_is_null_check_over_reference_equality_method = true
dotnet_style_prefer_simplified_boolean_expressions = true
dotnet_style_prefer_simplified_interpolation = true
# Parameter preferences
dotnet_code_quality_unused_parameters = all
# Suppression preferences
dotnet_remove_unnecessary_suppression_exclusions = none
# New line preferences
#dotnet_diagnostic.IDE2000.severity = warning
dotnet_style_allow_multiple_blank_lines_experimental = false:error
# dotnet_diagnostic.IDE2001.severity = none
csharp_style_allow_embedded_statements_on_same_line_experimental = false
# dotnet_diagnostic.IDE2002.severity = warning
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false
# dotnet_diagnostic.IDE2003.severity = error
dotnet_style_allow_statement_immediately_after_block_experimental = false:error
# Naming Conventions
## Async methods must use "Async" suffix
dotnet_naming_rule.async_methods_end_in_async.symbols = any_async_methods
dotnet_naming_rule.async_methods_end_in_async.style = end_in_async
dotnet_naming_rule.async_methods_end_in_async.severity = error
dotnet_naming_symbols.any_async_methods.applicable_kinds = method
dotnet_naming_symbols.any_async_methods.applicable_accessibilities = *
dotnet_naming_symbols.any_async_methods.required_modifiers = async
dotnet_naming_style.end_in_async.capitalization = pascal_case
dotnet_naming_style.end_in_async.required_prefix =
dotnet_naming_style.end_in_async.required_suffix = Async
dotnet_naming_style.end_in_async.word_separator =
## private fields must prefix with an underscore
dotnet_naming_rule.private_members_with_underscore.symbols = private_fields
dotnet_naming_rule.private_members_with_underscore.style = prefix_underscore
dotnet_naming_rule.private_members_with_underscore.severity = error
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
dotnet_naming_style.prefix_underscore.capitalization = camel_case
dotnet_naming_style.prefix_underscore.required_prefix = _
## private static fields must use PascalCase (overrides '_' based on SA1311)
dotnet_naming_rule.private_static_field_naming.symbols = private_static_field_naming
dotnet_naming_rule.private_static_field_naming.style = pascal_case_style
dotnet_naming_rule.private_static_field_naming.severity = error
dotnet_naming_symbols.private_static_field_naming.applicable_kinds = field
dotnet_naming_symbols.private_static_field_naming.applicable_accessibilities = private
dotnet_naming_symbols.private_static_field_naming.required_modifiers = static, readonly
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
## Constant fields must use PascalCase
dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = error
dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
dotnet_naming_symbols.constant_fields.applicable_kinds = field
dotnet_naming_symbols.constant_fields.applicable_accessibilities = *
dotnet_naming_symbols.constant_fields.required_modifiers = const
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
## Interfaces must have an I suffix
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.severity = error
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_style.begins_with_i.capitalization = pascal_case
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
## Types and Non-Field Members must be PascalCase
dotnet_naming_rule.types_should_be_pascal_case.severity = error
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = error
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =
## Code Style Rules
# IDE1005: Use conditional delegate call
csharp_style_conditional_delegate_call = true
# IDE1005: Delegate invocation can be simplified.
dotnet_diagnostic.IDE1005.severity = warning
# IDE1006: Naming Styles
dotnet_diagnostic.IDE1006.severity = error
# IDEOOO8: Use of var
dotnet_diagnostic.IDE0008.severity = none
# IDE0010: Add missing cases
dotnet_diagnostic.IDE0010.severity = none
# IDE0011: Add braces
csharp_prefer_braces = when_multiline
# IDE0025: Use expression body for properties
csharp_style_expression_bodied_properties = true
# IDE0026: Use expression body for indexers
csharp_style_expression_bodied_indexers = true
# IDE0027: Use expression body for accessors
csharp_style_expression_bodied_accessors = true
# IDE0046: Convert to conditional expression
dotnet_diagnostic.IDE0046.severity = none
# IDE0058: Expression value is never used
# csharp_style_unused_value_expression_statement_preference = discard_variable
dotnet_diagnostic.IDE0058.severity = none
## Code Quality Rules
# CA1031: Do not catch general exception types
dotnet_diagnostic.CA1031.severity = none
# CA1822: Mark members as static
##dotnet_diagnostic.CA1822.severity = none
# CA1507: Use nameof to express symbol names
dotnet_diagnostic.CA1507.severity = error
## Compiler
# CS0618: Type or member is obsolete
##dotnet_diagnostic.CS0618.severity = error
dotnet_diagnostic.CS0618.severity = warning
# CS1591: Missing XML comment for publicly visible type or member
dotnet_diagnostic.CS1591.severity = none
## StyleCop.Analyzers
# SA1000: Keywords should be spaced correctly
dotnet_diagnostic.SA1000.severity = error
# SA1005: Single line comments should begin with single space
dotnet_diagnostic.SA1005.severity = error
# SA1008
# SA1025: Spacing??
# SA1101: PrefixLocalCallsWithThis
dotnet_diagnostic.SA1101.severity = none
# SA1116: Split parameters should start on line after declaration
dotnet_diagnostic.SA1116.severity = none
# SA1118: Parameter should not span multiple lines
dotnet_diagnostic.SA1118.severity = warning
# SA1137: Elements should have the same indentation
dotnet_diagnostic.SA1137.severity = error
# SA1124: Do not use regions
dotnet_diagnostic.SA1124.severity = error
# SA1200: UsingDirectivesMustBePlacedWithinNamespace
dotnet_diagnostic.SA1200.severity = none
# SA1201: Elements should appear in the correct order
dotnet_diagnostic.SA1201.severity = error
# SA1202: Elements should be ordered by access
dotnet_diagnostic.SA1202.severity = error
# SA1203: Constants should appear before fields
dotnet_diagnostic.SA1203.severity = error
# SA1204: Static elements should appear before instance elements
dotnet_diagnostic.SA1204.severity = error
# SA1214: Readonly fields should appear before non-readonly fields
dotnet_diagnostic.SA1214.severity = error
# SA1306: Field names should begin with lower-case letter
dotnet_diagnostic.SA1306.severity = error
# SA1309: FieldNamesMustNotBeginWithUnderscore
dotnet_diagnostic.SA1309.severity = none
# SA1313: Parameter names should begin with lower-case letter
dotnet_diagnostic.SA1313.severity = error
# SA1414: Tuple types in signatures should have element names
dotnet_diagnostic.SA1414.severity = silent
# SA1503: Braces should not be omitted
dotnet_diagnostic.SA1503.severity = none
# SA1505: Opening braces should not be floowed by a blank line
dotnet_diagnostic.SA1505.severity= error
# SA1507: Code should not contain multiple blank lines in a row
dotnet_diagnostic.SA1507.severity = error
# SA1508: Closing brac should not be preceded by a blank line
dotnet_diagnostic.SA1508.severity= error
# SA1513: Closing brace should be followed by blank line
dotnet_diagnostic.SA1513.severity = error
# SA1514: Element documentation header should be preceded by blank line
dotnet_diagnostic.SA1514.severity = error
# SA1515: Single-line comment should be preceded by blank line
dotnet_diagnostic.SA1515.severity = warning
# SA1516: Elements should be separated by blank line
dotnet_diagnostic.SA1516.severity = error
# SA1600: Elements should be documented
dotnet_diagnostic.SA1600.severity = none
# SA1602: Enumeration items should not be documented
dotnet_diagnostic.SA1602.severity = none
# SA1623: Property summary documentation should match accessors
dotnet_diagnostic.SA1623.severity = warning
# SA1633: FileMustHaveHeader
dotnet_diagnostic.SA1633.severity = silent
# SA1636: File header copyright text should match
dotnet_diagnostic.SA1636.severity = none
# Default severity for analyzer diagnostics with category 'StyleCop.CSharp.SpacingRules' SA1028: Code should not contain trailing whitespace
dotnet_analyzer_diagnostic.category-StyleCop.CSharp.SpacingRules.severity = error
dotnet_diagnostic.VSSpell001.severity = suggestion
dotnet_diagnostic.VSSpell002.severity = none
# SA0001: XML comment analysis is disabled due to project configuration
dotnet_diagnostic.SA0001.severity = none
# Ignore Generated XAML
[*.sg.cs]
# CS1591: Missing XML comment for publicly visible type or member
dotnet_diagnostic.CS1591.severity = none
dotnet_analyzer_diagnostic.CS1591.severity = none
# generated_code = true
[WindowsAppSDK-VersionInfo.cs]
dotnet_diagnostic.CS1591.severity = none
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/.gitignore
================================================
# Copyright CURRENT_YEAR COMPANY_NAME
# Template for C#
# Generic Visual Studio files
*.bak
*.csproj.user
*.suo
*.vshost.exe
*.vshost.exe.manifest
*.exe.config
*.exp
*.lib
*.pdb
*.pfx
*.user
*.vbw
*.scc
*.oca
*.userprefs
*.userosscache
*.sln.docstates
*.autorecover
*.coverage
# VS Code
.vscode/*
!.vscode/extensions.json
!.vscode/launch.json
!.vscode/settings.json
# SQLite datbases
*.db3
# Xamarin.Android Resource.Designer.cs files
**/*.Android/**/[Rr]esource.[Dd]esigner.cs
**/*.Droid/**/[Rr]esource.[Dd]esigner.cs
**/Android/**/[Rr]esource.[Dd]esigner.cs
**/Droid/**/[Rr]esource.[Dd]esigner.cs
# Build results
[Oo]utput/
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
.vs/
# NuGet Packages
*.nupkg
## The packages folder can be ignored because of Package Restore
**/packages/*
## Except build/, which is used as an MSBuild target.
!**/packages/build/
## Uncomment if necessary however generally it will be regenerated when needed
!**/packages/repositories.config
## NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# NUnit
*.VisualState.xml
TestResult.xml
# Installer Folder
/installer/*.exe
!/installer/autorun.exe
# Lib folder
/lib/*
!/lib/readme.txt
!/lib/readme.md
# Output
!/[Oo]utput/readme.txt
!/[Oo]utput/readme.md
## USER DEFINED
/[Dd]ocs/*.csv
/[Dd]ocs/backup
/[Tt]ools
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/App.axaml
================================================
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/App.axaml.cs
================================================
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core;
using Avalonia.Data.Core.Plugins;
using Avalonia.Markup.Xaml;
using Prism.DryIoc;
using Prism.Ioc;
using Prism.Navigation.Regions;
using SampleApp.Services;
using SampleApp.ViewModels;
using SampleApp.Views;
namespace SampleApp;
public partial class App : PrismApplication
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
// Required when overriding Initialize
base.Initialize();
}
protected override AvaloniaObject CreateShell()
{
return Container.Resolve();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// Register your Services, Views, Dialogs, etc. here
// Services
containerRegistry.RegisterSingleton();
// Views - Region Navigation
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
}
/// Called after Initialize.
protected override void OnInitialized()
{
// Register Views to the Region it will appear in. Don't register them in the ViewModel.
var regionManager = Container.Resolve();
// WARNING: Prism v11.0.0
// - DataTemplates MUST define a DataType or else an XAML error will be thrown
// - Error: DataTemplate inside of DataTemplates must have a DataType set
regionManager.RegisterViewWithRegion(RegionNames.ContentRegion, typeof(DashboardView));
}
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/PrismAvaloniaDemo.csproj
================================================
WinExenet10.0latestenabletrueapp.manifesttruefalseSample Prism.Avalonia AppDamian SuessPrism.Avalonia end-to-end demonstration application.
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Program.cs
================================================
using System;
using Avalonia;
namespace SampleApp;
internal sealed class Program
{
// Initialization code. Don't use any Avalonia, third-party APIs or any
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
// yet and stuff might break.
[STAThread]
public static void Main(string[] args) => BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp() => AppBuilder
.Configure()
.UsePlatformDetect()
.WithInterFont()
.LogToTrace();
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/RegionNames.cs
================================================
namespace SampleApp;
public static class RegionNames
{
public const string ContentRegion = "ContentRegion";
public const string FooterRegion = "FooterRegion";
public const string SidebarRegion = "SidebarRegion";
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Services/INotificationService.cs
================================================
using System;
using Avalonia.Controls;
using Avalonia.Controls.Notifications;
namespace SampleApp.Services;
/// In-application Notification Service Interface.
public interface INotificationService
{
/// Defines the maximum number of notifications visible at once.
int MaxItems { get; set; }
/// The expiry time in seconds at which the notification will close (default 5 seconds).
int NotificationTimeout { get; set; }
// Set the host window.
// Parent window.
void SetHostWindow(TopLevel window);
/// Display the notification.
/// Title.
/// Message.
/// The of the notification.
/// An optional action to call when the notification is clicked.
/// An optional action to call when the notification is closed.
void Show(string title,
string message,
NotificationType notificationType = NotificationType.Information,
Action? onClick = null,
Action? onClose = null);
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Services/NotificationService.cs
================================================
using System;
using Avalonia.Controls.Notifications;
namespace SampleApp.Services;
public class NotificationService : INotificationService
{
private int _notificationTimeout = 5;
private WindowNotificationManager? _notificationManager;
///
public int MaxItems { get; set; } = 4;
///
public int NotificationTimeout { get => _notificationTimeout; set => _notificationTimeout = (value < 0) ? 0 : value; }
///
public void SetHostWindow(TopLevel hostWindow)
{
var notificationManager = new WindowNotificationManager(hostWindow)
{
Position = NotificationPosition.BottomRight,
MaxItems = MaxItems,
Margin = new Thickness(0, 0, 15, 40)
};
_notificationManager = notificationManager;
}
///
public void Show(string title,
string message,
NotificationType notificationType = NotificationType.Information,
Action? onClick = null,
Action? onClose = null)
{
if (_notificationManager is { } nm)
{
nm.Show(
new Notification(
title,
message,
notificationType,
TimeSpan.FromSeconds(_notificationTimeout),
onClick,
onClose));
}
}
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Styles/Icons.axaml
================================================
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/ViewModels/DashboardViewModel.cs
================================================
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Avalonia;
using Avalonia.Styling;
using Prism.Commands;
using SampleApp.Services;
namespace SampleApp.ViewModels;
public class DashboardViewModel : ViewModelBase
{
private readonly INotificationService _notification;
private int _counter = 0;
private ObservableCollection _listItems = new();
private int _listItemSelected = -1;
private string _listItemText = string.Empty;
private ThemeVariant? _themeSelected;
public DashboardViewModel(INotificationService notifyService)
{
_notification = notifyService;
ThemeSelected = Application.Current!.RequestedThemeVariant;
}
public DelegateCommand CmdAddItem => new(() =>
{
_counter++;
ListItems.Add($"Item Number: {_counter}");
// Optionally use, `Insert(0, ..)` to insert items at the top
//ListItems.Insert(0, entry);
});
public DelegateCommand CmdClearItems => new(() =>
{
ListItems.Clear();
});
public DelegateCommand CmdNotification => new(() =>
{
_notification.Show("Hello Prism!", "Notification Pop-up Message.");
// Alternate OnClick action
////_notification.Show("Hello Prism!", "Notification Pop-up Message.", () =>
////{
//// // Action to perform
////});
});
public ObservableCollection ListItems { get => _listItems; set => SetProperty(ref _listItems, value); }
public int ListItemSelected
{
get => _listItemSelected;
set
{
SetProperty(ref _listItemSelected, value);
if (value == -1)
return;
ListItemText = ListItems[ListItemSelected];
}
}
public string ListItemText { get => _listItemText; set => SetProperty(ref _listItemText, value); }
public ThemeVariant? ThemeSelected
{
get => _themeSelected;
set
{
SetProperty(ref _themeSelected, value);
Application.Current!.RequestedThemeVariant = _themeSelected;
}
}
public List ThemeStyles => new()
{
ThemeVariant.Default,
ThemeVariant.Dark,
ThemeVariant.Light,
};
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/ViewModels/MainWindowViewModel.cs
================================================
using Prism.Commands;
using Prism.Navigation.Regions;
using SampleApp.Views;
namespace SampleApp.ViewModels;
public class MainWindowViewModel : ViewModelBase
{
private readonly IRegionManager _regionManager;
private bool _isPaneOpened;
public MainWindowViewModel(IRegionManager regionManager)
{
// Since this is a basic ShellWindow, there's not much to do here.
// For enterprise apps, you could register up subscriptions
// or other startup background tasks so that they get triggered
// on startup, rather than putting them in the DashboardViewModel.
//
// For example, initiate the pulling of News Feeds, etc.
_regionManager = regionManager;
Title = "Sample Prism.Avalonia";
IsPaneOpened = true;
}
public DelegateCommand CmdDashboard => new(() =>
{
// _journal.Clear();
_regionManager.RequestNavigate(RegionNames.ContentRegion, nameof(DashboardView));
});
public DelegateCommand CmdFlyoutMenu => new(() =>
{
IsPaneOpened = !IsPaneOpened;
});
public DelegateCommand CmdSettings => new(() => _regionManager.RequestNavigate(RegionNames.ContentRegion, nameof(SettingsView)));
public bool IsPaneOpened { get => _isPaneOpened; set => SetProperty(ref _isPaneOpened, value); }
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/ViewModels/SettingsViewModel.cs
================================================
using SampleApp.Views;
using Prism.Commands;
using Prism.Navigation;
using Prism.Navigation.Regions;
namespace SampleApp.ViewModels;
public class SettingsViewModel : ViewModelBase
{
private readonly IRegionManager _regionManager;
public SettingsViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
Title = "Settings";
}
public DelegateCommand CmdNavigateToChild => new(() =>
{
var navParams = new NavigationParameters
{
{ "key1", "Some text" },
{ "key2", 999 }
};
_regionManager.RequestNavigate(
RegionNames.ContentRegion,
nameof(SubSettingsView),
navParams);
});
public override void OnNavigatedFrom(NavigationContext navigationContext)
{
base.OnNavigatedFrom(navigationContext);
}
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/ViewModels/SubSettingsViewModel.cs
================================================
using Prism.Commands;
using Prism.Navigation.Regions;
using SampleApp.Views;
namespace SampleApp.ViewModels;
public class SubSettingsViewModel : ViewModelBase
{
private readonly IRegionManager _regionManager;
private IRegionNavigationJournal? _journal;
private string _messageNumber = string.Empty;
private string _messageText = string.Empty;
public SubSettingsViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
Title = "Settings - SubView";
}
public DelegateCommand CmdNavigateBack => new DelegateCommand(() =>
{
// Go back to the previous calling page, otherwise, Dashboard.
if (_journal != null && _journal.CanGoBack)
_journal.GoBack();
else
_regionManager.RequestNavigate(RegionNames.ContentRegion, nameof(DashboardView));
});
public string MessageNumber { get => _messageNumber; set => SetProperty(ref _messageNumber, value); }
public string MessageText { get => _messageText; set => SetProperty(ref _messageText, value); }
/// Navigation completed successfully.
/// Navigation context.
public override void OnNavigatedTo(NavigationContext navigationContext)
{
// Used to "Go Back" to parent
_journal = navigationContext.NavigationService.Journal;
// Display our parameters
MessageText = navigationContext.Parameters["key1"].ToString() ?? "";
MessageNumber = navigationContext.Parameters["key2"].ToString() ?? "";
}
public override bool OnNavigatingTo(NavigationContext navigationContext)
{
// Navigation permission sample:
// Don't allow navigation if our keys are missing
return navigationContext.Parameters.ContainsKey("key1") &&
navigationContext.Parameters.ContainsKey("key2");
}
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/ViewModels/ViewModelBase.cs
================================================
using Prism.Mvvm;
using Prism.Navigation.Regions;
namespace SampleApp.ViewModels;
public class ViewModelBase : BindableBase, INavigationAware
{
private string _title = string.Empty;
/// Gets or sets the title of the View.
public string Title { get => _title; set => SetProperty(ref _title, value); }
///
/// Called to determine if this instance can handle the navigation request.
/// Don't call this directly, use .
///
/// The navigation context.
/// if this instance accepts the navigation request; otherwise, .
public virtual bool IsNavigationTarget(NavigationContext navigationContext)
{
// Auto-allow navigation
return OnNavigatingTo(navigationContext);
}
/// Called when the implementer is being navigated away from.
/// The navigation context.
public virtual void OnNavigatedFrom(NavigationContext navigationContext)
{
}
/// Called when the implementer has been navigated to.
/// The navigation context.
public virtual void OnNavigatedTo(NavigationContext navigationContext)
{
}
/// Navigation validation checker.
/// Override for Prism 7.2's IsNavigationTarget.
/// The navigation context.
/// if this instance accepts the navigation request; otherwise, .
public virtual bool OnNavigatingTo(NavigationContext navigationContext)
{
return true;
}
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Views/DashboardView.axaml
================================================
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Views/DashboardView.axaml.cs
================================================
using Avalonia;
using Avalonia.Controls;
using Prism.Ioc;
using SampleApp.Services;
namespace SampleApp.Views;
/// DashboardView.
public partial class DashboardView : UserControl
{
public DashboardView()
{
InitializeComponent();
}
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
// Initialize the WindowNotificationManager with the "TopLevel". Previously (v0.10), MainWindow
var notifyService = ContainerLocator.Current.Resolve();
notifyService.SetHostWindow(TopLevel.GetTopLevel(this));
}
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Views/MainWindow.axaml
================================================
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Views/MainWindow.axaml.cs
================================================
using Avalonia.Controls;
namespace SampleApp.Views;
/// Main window view.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Views/SettingsView.axaml
================================================
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Views/SettingsView.axaml.cs
================================================
using Avalonia.Controls;
namespace SampleApp.Views;
/// Sample Settings View.
public partial class SettingsView : UserControl
{
public SettingsView()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Views/SubSettingsView.axaml
================================================
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/Views/SubSettingsView.axaml.cs
================================================
using Avalonia.Controls;
namespace SampleApp.Views;
public partial class SubSettingsView : UserControl
{
public SubSettingsView()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/app.manifest
================================================
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo/settings.XamlStyler
================================================
{
"AttributesTolerance": 2,
"KeepFirstAttributeOnSameLine": true,
"MaxAttributeCharactersPerLine": 0,
"MaxAttributesPerLine": 1,
"NewlineExemptionElements": "RadialGradientBrush, GradientStop, LinearGradientBrush, ScaleTransfom, SkewTransform, RotateTransform, TranslateTransform, Trigger, Condition, Setter",
"SeparateByGroups": false,
"AttributeIndentation": 0,
"AttributeIndentationStyle": 1,
"RemoveDesignTimeReferences": false,
"EnableAttributeReordering": true,
"AttributeOrderingRuleGroups": [
"xmlns, xmlns:x",
"xmlns:*",
"x:Class",
"x:*",
"*:*",
"Key, Name, Uid, Title, Text",
"Grid.Row, Grid.RowSpan, Grid.Column, Grid.ColumnSpan, Canvas.Left, Canvas.Top, Canvas.Right, Canvas.Bottom",
"Width, Height, MinWidth, MinHeight, MaxWidth, MaxHeight",
"Margin, Padding, HorizontalAlignment, VerticalAlignment, HorizontalContentAlignment, VerticalContentAlignment, Panel.ZIndex",
"Source",
"*",
"PageSource, PageIndex, Offset, Color, TargetName, Property, Value, StartPoint, EndPoint",
"mc:Ignorable, d:IsDataSource, d:LayoutOverrides, d:IsStaticText",
"Storyboard.*, From, To, Duration"
],
"FirstLineAttributes": "Text",
"OrderAttributesByName": true,
"PutEndingBracketOnNewLine": false,
"RemoveEndingTagOfEmptyElement": true,
"SpaceBeforeClosingSlash": true,
"RootElementLineBreakRule": 0,
"ReorderVSM": 2,
"ReorderGridChildren": false,
"ReorderCanvasChildren": false,
"ReorderSetters": 0,
"FormatMarkupExtension": true,
"NoNewLineMarkupExtensions": "x:Bind, Binding",
"ThicknessSeparator": 2,
"ThicknessAttributes": "Margin, Padding, BorderThickness, ThumbnailClipMargin",
"FormatOnSave": true,
"CommentPadding": 1
}
================================================
FILE: e2e/Avalonia/PrismAvaloniaDemo.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.10.35122.118
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrismAvaloniaDemo", "PrismAvaloniaDemo\PrismAvaloniaDemo.csproj", "{89EF9B20-B80E-4B4C-A202-170CC0C0B62A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Prism Library", "Prism Library", "{7EEF2BF7-98F5-432B-B36D-DB4915CF4A3D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Avalonia", "..\..\src\Avalonia\Prism.Avalonia\Prism.Avalonia.csproj", "{CD50461C-B394-433A-86CA-3DBCD13E8B22}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Avalonia", "..\..\src\Avalonia\Prism.DryIoc.Avalonia\Prism.DryIoc.Avalonia.csproj", "{FF15E73E-5D71-48DD-80D5-DDCA6A59A6B2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Core", "..\..\src\Prism.Core\Prism.Core.csproj", "{62ADE0CF-751D-4AC6-9C2C-21DC12CBD338}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Events", "..\..\src\Prism.Events\Prism.Events.csproj", "{FE27B57B-F986-44B7-90CE-421034A891B9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{89EF9B20-B80E-4B4C-A202-170CC0C0B62A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89EF9B20-B80E-4B4C-A202-170CC0C0B62A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89EF9B20-B80E-4B4C-A202-170CC0C0B62A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89EF9B20-B80E-4B4C-A202-170CC0C0B62A}.Release|Any CPU.Build.0 = Release|Any CPU
{CD50461C-B394-433A-86CA-3DBCD13E8B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD50461C-B394-433A-86CA-3DBCD13E8B22}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD50461C-B394-433A-86CA-3DBCD13E8B22}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD50461C-B394-433A-86CA-3DBCD13E8B22}.Release|Any CPU.Build.0 = Release|Any CPU
{FF15E73E-5D71-48DD-80D5-DDCA6A59A6B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FF15E73E-5D71-48DD-80D5-DDCA6A59A6B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FF15E73E-5D71-48DD-80D5-DDCA6A59A6B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FF15E73E-5D71-48DD-80D5-DDCA6A59A6B2}.Release|Any CPU.Build.0 = Release|Any CPU
{62ADE0CF-751D-4AC6-9C2C-21DC12CBD338}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{62ADE0CF-751D-4AC6-9C2C-21DC12CBD338}.Debug|Any CPU.Build.0 = Debug|Any CPU
{62ADE0CF-751D-4AC6-9C2C-21DC12CBD338}.Release|Any CPU.ActiveCfg = Release|Any CPU
{62ADE0CF-751D-4AC6-9C2C-21DC12CBD338}.Release|Any CPU.Build.0 = Release|Any CPU
{FE27B57B-F986-44B7-90CE-421034A891B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FE27B57B-F986-44B7-90CE-421034A891B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FE27B57B-F986-44B7-90CE-421034A891B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FE27B57B-F986-44B7-90CE-421034A891B9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{CD50461C-B394-433A-86CA-3DBCD13E8B22} = {7EEF2BF7-98F5-432B-B36D-DB4915CF4A3D}
{FF15E73E-5D71-48DD-80D5-DDCA6A59A6B2} = {7EEF2BF7-98F5-432B-B36D-DB4915CF4A3D}
{62ADE0CF-751D-4AC6-9C2C-21DC12CBD338} = {7EEF2BF7-98F5-432B-B36D-DB4915CF4A3D}
{FE27B57B-F986-44B7-90CE-421034A891B9} = {7EEF2BF7-98F5-432B-B36D-DB4915CF4A3D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2E70249F-C31B-4FB3-A901-E3767E3A9FF5}
EndGlobalSection
EndGlobal
================================================
FILE: e2e/Maui/Directory.Build.props
================================================
enabletrue
================================================
FILE: e2e/Maui/Directory.Build.targets
================================================
================================================
FILE: e2e/Maui/MauiModule/Dialogs/LoginDialog.xaml
================================================
================================================
FILE: e2e/Maui/MauiModule/Dialogs/LoginDialog.xaml.cs
================================================
namespace MauiModule.Dialogs;
public partial class LoginDialog : Grid
{
public LoginDialog()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiModule/MauiAppModule.cs
================================================
using MauiModule.Dialogs;
using MauiModule.ViewModels;
using MauiModule.Views;
namespace MauiModule
{
// All the code in this file is included in all platforms.
public class MauiAppModule : IModule
{
public void OnInitialized(IContainerProvider containerProvider)
{
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterDialog();
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
}
}
}
================================================
FILE: e2e/Maui/MauiModule/MauiModule.csproj
================================================
net10.0falsetrue
================================================
FILE: e2e/Maui/MauiModule/ViewModels/BaseServices.cs
================================================
namespace MauiModule.ViewModels;
public class BaseServices
{
public BaseServices(
INavigationService navigationService,
IPageDialogService pageDialogs,
IDialogService dialogService,
IDialogViewRegistry dialogRegistry)
{
NavigationService = navigationService;
PageDialogs = pageDialogs;
Dialogs = dialogService;
DialogRegistry = dialogRegistry;
}
public INavigationService NavigationService { get; }
public IPageDialogService PageDialogs { get; }
public IDialogService Dialogs { get; }
public IDialogViewRegistry DialogRegistry { get; }
}
================================================
FILE: e2e/Maui/MauiModule/ViewModels/LoginViewModel.cs
================================================
namespace MauiModule.ViewModels;
public class LoginViewModel : BindableBase, IDialogAware
{
private bool _canClose;
public LoginViewModel()
{
LoginCommand = new DelegateCommand(OnLoginCommandExecuted);
}
public string Title => "What's your name?";
private string _name;
public string Name
{
get => _name;
set => SetProperty(ref _name, value);
}
public DelegateCommand LoginCommand { get; }
public DialogCloseListener RequestClose { get; }
public bool CanCloseDialog() => _canClose;
public void OnDialogClosed()
{
}
public void OnDialogOpened(IDialogParameters parameters)
{
}
private void OnLoginCommandExecuted()
{
_canClose = true;
RequestClose.Invoke();
}
}
================================================
FILE: e2e/Maui/MauiModule/ViewModels/ViewAViewModel.cs
================================================
namespace MauiModule.ViewModels;
public class ViewAViewModel : ViewModelBase
{
public ViewAViewModel(BaseServices baseServices)
: base(baseServices)
{
}
public bool CanNavigateResult { get; set; }
public override bool CanNavigate(INavigationParameters parameters)
{
return CanNavigateResult;
}
}
================================================
FILE: e2e/Maui/MauiModule/ViewModels/ViewBViewModel.cs
================================================
namespace MauiModule.ViewModels;
public class ViewBViewModel : ViewModelBase
{
public ViewBViewModel(BaseServices baseServices)
: base(baseServices)
{
}
}
================================================
FILE: e2e/Maui/MauiModule/ViewModels/ViewCViewModel.cs
================================================
namespace MauiModule.ViewModels;
public class ViewCViewModel : ViewModelBase
{
public ViewCViewModel(BaseServices baseServices)
: base(baseServices)
{
}
}
================================================
FILE: e2e/Maui/MauiModule/ViewModels/ViewDViewModel.cs
================================================
namespace MauiModule.ViewModels;
public class ViewDViewModel : ViewModelBase
{
public ViewDViewModel(BaseServices baseServices)
: base(baseServices)
{
}
}
================================================
FILE: e2e/Maui/MauiModule/ViewModels/ViewModelBase.cs
================================================
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;
namespace MauiModule.ViewModels;
public abstract class ViewModelBase : BindableBase, IInitialize, INavigatedAware, IPageLifecycleAware, IConfirmNavigation
{
protected INavigationService _navigationService { get; }
protected IPageDialogService _pageDialogs { get; }
protected IDialogService _dialogs { get; }
protected ViewModelBase(BaseServices baseServices)
{
_navigationService = baseServices.NavigationService;
_pageDialogs = baseServices.PageDialogs;
_dialogs = baseServices.Dialogs;
Title = Regex.Replace(GetType().Name, "ViewModel", string.Empty);
Id = Guid.NewGuid().ToString();
NavigateCommand = new DelegateCommand(OnNavigateCommandExecuted);
ShowPageDialog = new DelegateCommand(OnShowPageDialog);
Messages = new ObservableCollection();
Messages.CollectionChanged += (sender, args) =>
{
foreach (string message in args.NewItems)
Console.WriteLine($"{Title} - {message}");
};
AvailableDialogs = baseServices.DialogRegistry.Registrations.Select(x => x.Name).ToList();
SelectedDialog = AvailableDialogs.FirstOrDefault();
ShowDialog = new DelegateCommand(OnShowDialogCommand, () => !string.IsNullOrEmpty(SelectedDialog))
.ObservesProperty(() => SelectedDialog);
GoBack = new DelegateCommand(OnGoToBack);
}
public IEnumerable AvailableDialogs { get; }
public string Title { get; }
public string Id { get; }
private string _selectedDialog;
public string SelectedDialog
{
get => _selectedDialog;
set => SetProperty(ref _selectedDialog, value);
}
public ObservableCollection Messages { get; }
public DelegateCommand NavigateCommand { get; }
public DelegateCommand ShowPageDialog { get; }
public DelegateCommand ShowDialog { get; }
public DelegateCommand GoBack { get; }
private void OnNavigateCommandExecuted(string uri)
{
Messages.Add($"OnNavigateCommandExecuted: {uri}");
_navigationService.NavigateAsync(uri)
.OnNavigationError(ex => Console.WriteLine(ex));
}
private void OnShowPageDialog()
{
Messages.Add("OnShowPageDialog");
_pageDialogs.DisplayAlertAsync("Message", $"Hello from {Title}. This is a Page Dialog Service Alert!", "Ok");
}
private void OnShowDialogCommand()
{
Messages.Add("OnShowDialog");
_dialogs.ShowDialog(SelectedDialog, null, DialogCallback);
}
private void DialogCallback(IDialogResult result) =>
Messages.Add("Dialog Closed");
private void OnGoToBack(string viewName)
{
Messages.Add($"On Go Back {viewName}");
_navigationService.GoBackToAsync(viewName);
}
public void Initialize(INavigationParameters parameters)
{
Messages.Add("ViewModel Initialized");
foreach (var parameter in parameters.Where(x => x.Key.Contains("message")))
Messages.Add(parameter.Value.ToString());
}
public virtual void OnNavigatedFrom(INavigationParameters parameters)
{
Messages.Add("ViewModel NavigatedFrom");
}
public void OnNavigatedTo(INavigationParameters parameters)
{
Messages.Add("ViewModel NavigatedTo");
}
public void OnAppearing()
{
Messages.Add("View Appearing");
}
public void OnDisappearing()
{
Messages.Add("View Disappearing");
}
public virtual bool CanNavigate(INavigationParameters parameters)
{
Messages.Add("Can Navigate");
return true;
}
}
================================================
FILE: e2e/Maui/MauiModule/Views/ViewA.xaml
================================================
================================================
FILE: e2e/Maui/MauiModule/Views/ViewA.xaml.cs
================================================
namespace MauiModule.Views;
public partial class ViewA : ContentPage
{
public ViewA()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiModule/Views/ViewB.xaml
================================================
================================================
FILE: e2e/Maui/MauiModule/Views/ViewB.xaml.cs
================================================
namespace MauiModule.Views;
public partial class ViewB : ContentPage
{
public ViewB()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiModule/Views/ViewC.xaml
================================================
================================================
FILE: e2e/Maui/MauiModule/Views/ViewC.xaml.cs
================================================
namespace MauiModule.Views;
public partial class ViewC : ContentPage
{
public ViewC()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiModule/Views/ViewD.xaml
================================================
================================================
FILE: e2e/Maui/MauiModule/Views/ViewD.xaml.cs
================================================
namespace MauiModule.Views;
public partial class ViewD : ContentPage
{
public ViewD()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/MauiRegionsModule.csproj
================================================
net10.0falsetrue
================================================
FILE: e2e/Maui/MauiRegionsModule/MauiTestRegionsModule.cs
================================================
using MauiRegionsModule.ViewModels;
using MauiRegionsModule.Views;
namespace MauiRegionsModule;
public class MauiTestRegionsModule : IModule
{
public void OnInitialized(IContainerProvider containerProvider)
{
var regionManager = containerProvider.Resolve();
regionManager.RegisterViewWithRegion("ContentRegion");
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry
.RegisterForNavigation()
.RegisterForNavigation()
.RegisterForNavigation()
.RegisterForNavigation()
.RegisterForNavigation()
.RegisterForRegionNavigation()
.RegisterForRegionNavigation()
.RegisterForRegionNavigation();
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/ViewModels/ContentRegionPageViewModel.cs
================================================
namespace MauiRegionsModule.ViewModels;
public class ContentRegionPageViewModel : IInitialize
{
private IRegionManager _regionManager { get; }
private int _count;
public ContentRegionPageViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
NavigateCommand = new DelegateCommand(OnNavigateCommandExecuted);
}
public void Initialize(INavigationParameters parameters)
{
//_regionManager.RequestNavigate("ContentRegion", "RegionViewA");
}
public DelegateCommand NavigateCommand { get; }
private void OnNavigateCommandExecuted(string uri)
{
var message = $"Hello from Content Region Page ({_count++})";
_regionManager.RequestNavigate("ContentRegion", uri, new NavigationParameters { { "Message", message } });
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/ViewModels/RegionHomeViewModel.cs
================================================
namespace MauiRegionsModule.ViewModels;
internal class RegionHomeViewModel
{
private INavigationService _navigationService { get; }
public RegionHomeViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
NavigateCommand = new DelegateCommand(OnNavigateCommandExecuted);
}
public DelegateCommand NavigateCommand { get; }
private void OnNavigateCommandExecuted(string uri)
{
_navigationService.NavigateAsync(uri);
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/ViewModels/RegionViewAViewModel.cs
================================================
using Prism.Common;
namespace MauiRegionsModule.ViewModels;
public class RegionViewAViewModel : RegionViewModelBase, IInitialize
{
public RegionViewAViewModel(INavigationService navigationService, IPageAccessor pageAccessor)
: base(navigationService, pageAccessor)
{
}
public void Initialize(INavigationParameters parameters)
{
if (parameters.TryGetValue("Message", out var message))
Message = message;
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/ViewModels/RegionViewBViewModel.cs
================================================
using Prism.Common;
namespace MauiRegionsModule.ViewModels;
public class RegionViewBViewModel : RegionViewModelBase
{
public RegionViewBViewModel(INavigationService navigationService, IPageAccessor pageAccessor)
: base(navigationService, pageAccessor)
{
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/ViewModels/RegionViewCViewModel.cs
================================================
using Prism.Common;
namespace MauiRegionsModule.ViewModels;
public class RegionViewCViewModel : RegionViewModelBase
{
public RegionViewCViewModel(INavigationService navigationService, IPageAccessor pageAccessor)
: base(navigationService, pageAccessor)
{
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/ViewModels/RegionViewModelBase.cs
================================================
using Prism.Common;
namespace MauiRegionsModule.ViewModels;
public abstract class RegionViewModelBase : BindableBase, IRegionAware, IPageLifecycleAware
{
protected string Name => GetType().Name.Replace("ViewModel", string.Empty);
protected INavigationService _navigationService { get; }
private IPageAccessor _pageAccessor { get; }
protected IRegionNavigationService? _regionNavigation { get; private set; }
protected RegionViewModelBase(INavigationService navigationService, IPageAccessor pageAccessor)
{
_navigationService = navigationService;
_pageAccessor = pageAccessor;
}
public bool IsNavigationTarget(NavigationContext navigationContext) =>
navigationContext.NavigatedName() == Name;
private string? _message;
public string? Message
{
get => _message;
set => SetProperty(ref _message, value);
}
private int _viewCount;
public int ViewCount
{
get => _viewCount;
set => SetProperty(ref _viewCount, value);
}
public string? PageName => _pageAccessor.Page?.GetType()?.Name;
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
if (navigationContext.Parameters.ContainsKey(nameof(Message)))
Message = navigationContext.Parameters.GetValue(nameof(Message));
_regionNavigation = navigationContext.NavigationService;
ViewCount = navigationContext.NavigationService.Region.Views.Count();
}
public void OnAppearing()
{
RaisePropertyChanged(nameof(PageName));
}
public void OnDisappearing()
{
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/ContentRegionPage.xaml
================================================
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/ContentRegionPage.xaml.cs
================================================
namespace MauiRegionsModule.Views;
public partial class ContentRegionPage : ContentPage
{
public ContentRegionPage()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/DefaultViewInstancePage.xaml
================================================
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/DefaultViewInstancePage.xaml.cs
================================================
namespace MauiRegionsModule.Views;
public partial class DefaultViewInstancePage : ContentPage
{
public DefaultViewInstancePage()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/DefaultViewNamedPage.xaml
================================================
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/DefaultViewNamedPage.xaml.cs
================================================
namespace MauiRegionsModule.Views;
public partial class DefaultViewNamedPage : ContentPage
{
public DefaultViewNamedPage()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/DefaultViewTypePage.xaml
================================================
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/DefaultViewTypePage.xaml.cs
================================================
namespace MauiRegionsModule.Views;
public partial class DefaultViewTypePage : ContentPage
{
public DefaultViewTypePage()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/RegionHome.xaml
================================================
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/RegionHome.xaml.cs
================================================
namespace MauiRegionsModule.Views;
public partial class RegionHome : FlyoutPage
{
public RegionHome()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/RegionViewA.xaml
================================================
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/RegionViewA.xaml.cs
================================================
namespace MauiRegionsModule.Views;
public partial class RegionViewA : ContentView
{
public RegionViewA()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/RegionViewB.xaml
================================================
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/RegionViewB.xaml.cs
================================================
namespace MauiRegionsModule.Views;
public partial class RegionViewB : ContentView
{
public RegionViewB()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/RegionViewC.xaml
================================================
================================================
FILE: e2e/Maui/MauiRegionsModule/Views/RegionViewC.xaml.cs
================================================
namespace MauiRegionsModule.Views;
public partial class RegionViewC : ContentView
{
public RegionViewC()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/App.xaml
================================================
================================================
FILE: e2e/Maui/PrismMauiDemo/App.xaml.cs
================================================
namespace PrismMauiDemo;
public partial class App
{
public App()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/MauiProgram.cs
================================================
using MauiModule;
using MauiModule.ViewModels;
using MauiRegionsModule;
using PrismMauiDemo.ViewModels;
using PrismMauiDemo.Views;
namespace PrismMauiDemo;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
return MauiApp.CreateBuilder()
.UseMauiApp()
.UsePrism(prism =>
prism.ConfigureModuleCatalog(moduleCatalog =>
{
moduleCatalog.AddModule();
moduleCatalog.AddModule();
})
.RegisterTypes(containerRegistry =>
{
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
})
.AddGlobalNavigationObserver(context => context.Subscribe(x =>
{
if (x.Type == NavigationRequestType.Navigate)
Console.WriteLine($"Navigation: {x.Uri}");
else
Console.WriteLine($"Navigation: {x.Type}");
var status = x.Cancelled ? "Cancelled" : x.Result.Success ? "Success" : "Failed";
Console.WriteLine($"Result: {status}");
if (status == "Failed" && !string.IsNullOrEmpty(x.Result?.Exception?.Message))
Console.Error.WriteLine(x.Result.Exception.Message);
}))
//.CreateWindow(nav => nav.CreateBuilder()
// .AddTabbedSegment(page =>
// page.CreateTab("ViewC")
// .CreateTab(t =>
// t.AddNavigationPage()
// .AddSegment("ViewA", s => s.AddParameter("message", "Hello Tab - ViewA"))
// .AddSegment("ViewB", s => s.AddParameter("message", "Hello Tab - ViewB")))
// //.CreateTab("ViewC", s => s.AddParameter("message", "Hello Tab - ViewC"))
// .SelectedTab("NavigationPage|ViewB"))
// .AddParameter("message_global", "This is a Global Message")
// .Navigate())
.CreateWindow(navigationService => navigationService.CreateBuilder()
.AddSegment()
.NavigateAsync(HandleNavigationError))
)
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
})
.Build();
}
private static void HandleNavigationError(Exception ex)
{
Console.WriteLine(ex);
System.Diagnostics.Debugger.Break();
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/Android/AndroidManifest.xml
================================================
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/Android/MainActivity.cs
================================================
using Android.App;
using Android.Content.PM;
using Android.OS;
namespace PrismMauiDemo;
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)]
public class MainActivity : MauiAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Platform.Init(this, savedInstanceState);
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/Android/MainApplication.cs
================================================
using Android.App;
using Android.Runtime;
namespace PrismMauiDemo;
[Application]
public class MainApplication : MauiApplication
{
public MainApplication(IntPtr handle, JniHandleOwnership ownership)
: base(handle, ownership)
{
}
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/Android/Resources/values/colors.xml
================================================
#00A5F2#7E7D81#7E7D81
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/MacCatalyst/AppDelegate.cs
================================================
using Foundation;
namespace PrismMauiDemo;
[Register("AppDelegate")]
public class AppDelegate : MauiUIApplicationDelegate
{
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/MacCatalyst/Info.plist
================================================
UIDeviceFamily12UIRequiredDeviceCapabilitiesarm64UISupportedInterfaceOrientationsUIInterfaceOrientationPortraitUIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRightUISupportedInterfaceOrientations~ipadUIInterfaceOrientationPortraitUIInterfaceOrientationPortraitUpsideDownUIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRightXSAppIconAssetsAssets.xcassets/appicon.appiconset
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/MacCatalyst/Program.cs
================================================
using ObjCRuntime;
using UIKit;
namespace PrismMauiDemo;
public class Program
{
// This is the main entry point of the application.
static void Main(string[] args)
{
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main(args, null, typeof(AppDelegate));
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/Windows/App.xaml
================================================
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/Windows/App.xaml.cs
================================================
using Microsoft.UI.Xaml;
// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.
namespace PrismMauiDemo.WinUI;
///
/// Provides application-specific behavior to supplement the default Application class.
///
public partial class App : MauiWinUIApplication
{
///
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
///
public App()
{
this.InitializeComponent();
}
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
protected override void OnLaunched(LaunchActivatedEventArgs args)
{
base.OnLaunched(args);
Platform.OnLaunched(args);
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/Windows/Package.appxmanifest
================================================
Prism Maui DemoPrism Library
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/Windows/app.manifest
================================================
true/PMPerMonitorV2, PerMonitor
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/iOS/AppDelegate.cs
================================================
using Foundation;
namespace PrismMauiDemo;
[Register("AppDelegate")]
public class AppDelegate : MauiUIApplicationDelegate
{
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/iOS/Info.plist
================================================
LSRequiresIPhoneOSUIDeviceFamily12UIRequiredDeviceCapabilitiesarm64UISupportedInterfaceOrientationsUIInterfaceOrientationPortraitUIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRightUISupportedInterfaceOrientations~ipadUIInterfaceOrientationPortraitUIInterfaceOrientationPortraitUpsideDownUIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRightXSAppIconAssetsAssets.xcassets/appicon.appiconset
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/iOS/Program.cs
================================================
using ObjCRuntime;
using UIKit;
namespace PrismMauiDemo;
public class Program
{
// This is the main entry point of the application.
static void Main(string[] args)
{
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main(args, null, typeof(AppDelegate));
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Platforms/iOS/Resources/LaunchScreen.xib
================================================
================================================
FILE: e2e/Maui/PrismMauiDemo/PrismMauiDemo.csproj
================================================
net10.0-android;net10.0-ios;net10.0-maccatalyst$(TargetFrameworks);net10.0-windows10.0.19041ExePrismMauiDemotruetruetruePlatforms/Android/AndroidManifest.xmlPrism Mauicom.prismlibrary.prismmauidemo9420c397-cc28-4029-a4d5-2d780345b1091.01True14.214.021.010.0.17763.010.0.17763.06.5True
================================================
FILE: e2e/Maui/PrismMauiDemo/Properties/launchSettings.json
================================================
{
"profiles": {
"Windows Machine": {
"commandName": "MsixPackage",
"nativeDebugging": false
}
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Resources/Raw/AboutAssets.txt
================================================
Any raw assets you want to be deployed with your application can be placed in
this directory (and child directories). Deployment of the asset to your application
is automatically handled by the following `MauiAsset` Build Action within your `.csproj`.
These files will be deployed with you package and will be accessible using Essentials:
async Task LoadMauiAsset()
{
using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt");
using var reader = new StreamReader(stream);
var contents = reader.ReadToEnd();
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Resources/Styles/Colors.xaml
================================================
#00A5F2#DFD8F7#7E7D81WhiteBlack#E1E1E1#C8C8C8#ACACAC#919191#6E6E6E#404040#212121#141414#F7B548#FFD590#FFE5B9#28C2D1#7BDDEF#C3F2F4#3E8EED#72ACF1#A7CBF6
================================================
FILE: e2e/Maui/PrismMauiDemo/Resources/Styles/Styles.xaml
================================================
================================================
FILE: e2e/Maui/PrismMauiDemo/ViewModels/MainPageViewModel.cs
================================================
namespace PrismMauiDemo.ViewModels;
internal class MainPageViewModel
{
private INavigationService _navigationService { get; }
public MainPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
NavigateCommand = new DelegateCommand(OnNavigateCommandExecuted);
}
public DelegateCommand NavigateCommand { get; }
private void OnNavigateCommandExecuted(string uri)
{
_navigationService.NavigateAsync(uri)
.OnNavigationError(ex => Console.WriteLine(ex));
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/ViewModels/RootPageViewModel.cs
================================================
using MauiModule.ViewModels;
namespace PrismMauiDemo.ViewModels;
public class RootPageViewModel
{
private INavigationService _navigationService { get; }
public RootPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
NavigateCommand = new AsyncDelegateCommand(OnNavigateCommandExecuted);
}
public AsyncDelegateCommand NavigateCommand { get; }
private async Task OnNavigateCommandExecuted(string uri)
{
if (uri == "TabbedPage")
{
var result = await _navigationService.CreateBuilder()
.AddTabbedSegment(s => s.CreateTab()
.CreateTab(t => t.AddNavigationPage().AddSegment())
.CreateTab("ViewC")
.CreateTab("ViewD"))
.NavigateAsync();
if (result.Exception is not null)
{
Console.WriteLine(result.Exception);
System.Diagnostics.Debugger.Break();
}
}
else
{
_navigationService.NavigateAsync(uri)
.OnNavigationError(ex => Console.WriteLine(ex));
}
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/ViewModels/SplashPageViewModel.cs
================================================
namespace PrismMauiDemo.ViewModels;
internal class SplashPageViewModel : IPageLifecycleAware
{
private INavigationService _navigationService { get; }
public SplashPageViewModel(INavigationService navigationService)
{
_navigationService = navigationService;
}
public void OnAppearing()
{
_navigationService.CreateBuilder()
.UseAbsoluteNavigation()
.AddSegment()
.Navigate();
}
public void OnDisappearing()
{
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Views/MainPage.xaml
================================================
================================================
FILE: e2e/Maui/PrismMauiDemo/Views/MainPage.xaml.cs
================================================
namespace PrismMauiDemo.Views;
public partial class MainPage : FlyoutPage
{
public MainPage()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Views/RootPage.xaml
================================================
================================================
FILE: e2e/Maui/PrismMauiDemo/Views/RootPage.xaml.cs
================================================
namespace PrismMauiDemo.Views;
public partial class RootPage : ContentPage
{
public RootPage()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Views/SamplePage.xaml
================================================
================================================
FILE: e2e/Maui/PrismMauiDemo/Views/SamplePage.xaml.cs
================================================
namespace PrismMauiDemo.Views;
public partial class SamplePage : ContentPage
{
int count = 0;
public SamplePage()
{
InitializeComponent();
}
private void OnCounterClicked(object sender, EventArgs e)
{
count++;
CounterLabel.Text = $"Current count: {count}";
SemanticScreenReader.Announce(CounterLabel.Text);
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo/Views/SplashPage.xaml
================================================
================================================
FILE: e2e/Maui/PrismMauiDemo/Views/SplashPage.xaml.cs
================================================
namespace PrismMauiDemo.Views;
public partial class SplashPage : ContentPage
{
public SplashPage()
{
InitializeComponent();
}
}
================================================
FILE: e2e/Maui/PrismMauiDemo.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiModule", "MauiModule\MauiModule.csproj", "{3B47AE8B-3773-4920-A012-B42182742ACA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiRegionsModule", "MauiRegionsModule\MauiRegionsModule.csproj", "{2FF1C748-EA4C-45B1-80BA-A7D9E9E2C8F9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PrismMauiDemo", "PrismMauiDemo\PrismMauiDemo.csproj", "{BB949746-5591-41FB-80B1-65BE609F6A0E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Core", "..\..\src\Prism.Core\Prism.Core.csproj", "{2323BE09-7036-4FA7-B5B5-63046BE825E8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Maui", "..\..\src\Maui\Prism.Maui\Prism.Maui.csproj", "{2B756425-AB8D-4A78-80C5-13EA97C1AC73}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Maui.Rx", "..\..\src\Maui\Prism.Maui.Rx\Prism.Maui.Rx.csproj", "{CC05A6F0-D8FF-498C-80F0-59DC9AAEB08E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{8202B92A-A573-4365-8A15-E246504A7CBD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Maui", "..\..\src\Maui\Prism.DryIoc.Maui\Prism.DryIoc.Maui.csproj", "{2CE09D7A-B67C-4586-8432-64EA2D1A3CE4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{E91F80AA-3D61-4C28-B876-3EDFB5921E7D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Maui.Tests", "..\..\tests\Maui\Prism.DryIoc.Maui.Tests\Prism.DryIoc.Maui.Tests.csproj", "{EE6F0C99-61D1-4E2E-8185-FBA0D246D5C7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Maui.Tests", "..\..\tests\Maui\Prism.Maui.Tests\Prism.Maui.Tests.csproj", "{F3D2DFDB-95FB-4CBB-A624-35EB6550854D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Core.Tests", "..\..\tests\Prism.Core.Tests\Prism.Core.Tests.csproj", "{E0F13AA9-8083-47CA-B10D-93C5285D1505}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Events", "..\..\src\Prism.Events\Prism.Events.csproj", "{5623CB62-59C1-49BC-BB16-4C5D63D82DAC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{16C4C33B-CC0F-4FA4-A117-B9EF161CB7B8}"
ProjectSection(SolutionItems) = preProject
..\..\Directory.Packages.props = ..\..\Directory.Packages.props
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3B47AE8B-3773-4920-A012-B42182742ACA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3B47AE8B-3773-4920-A012-B42182742ACA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B47AE8B-3773-4920-A012-B42182742ACA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B47AE8B-3773-4920-A012-B42182742ACA}.Release|Any CPU.Build.0 = Release|Any CPU
{2FF1C748-EA4C-45B1-80BA-A7D9E9E2C8F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2FF1C748-EA4C-45B1-80BA-A7D9E9E2C8F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2FF1C748-EA4C-45B1-80BA-A7D9E9E2C8F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2FF1C748-EA4C-45B1-80BA-A7D9E9E2C8F9}.Release|Any CPU.Build.0 = Release|Any CPU
{BB949746-5591-41FB-80B1-65BE609F6A0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BB949746-5591-41FB-80B1-65BE609F6A0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BB949746-5591-41FB-80B1-65BE609F6A0E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{BB949746-5591-41FB-80B1-65BE609F6A0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BB949746-5591-41FB-80B1-65BE609F6A0E}.Release|Any CPU.Build.0 = Release|Any CPU
{2323BE09-7036-4FA7-B5B5-63046BE825E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2323BE09-7036-4FA7-B5B5-63046BE825E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2323BE09-7036-4FA7-B5B5-63046BE825E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2323BE09-7036-4FA7-B5B5-63046BE825E8}.Release|Any CPU.Build.0 = Release|Any CPU
{2B756425-AB8D-4A78-80C5-13EA97C1AC73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B756425-AB8D-4A78-80C5-13EA97C1AC73}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B756425-AB8D-4A78-80C5-13EA97C1AC73}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B756425-AB8D-4A78-80C5-13EA97C1AC73}.Release|Any CPU.Build.0 = Release|Any CPU
{CC05A6F0-D8FF-498C-80F0-59DC9AAEB08E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC05A6F0-D8FF-498C-80F0-59DC9AAEB08E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CC05A6F0-D8FF-498C-80F0-59DC9AAEB08E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC05A6F0-D8FF-498C-80F0-59DC9AAEB08E}.Release|Any CPU.Build.0 = Release|Any CPU
{2CE09D7A-B67C-4586-8432-64EA2D1A3CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2CE09D7A-B67C-4586-8432-64EA2D1A3CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2CE09D7A-B67C-4586-8432-64EA2D1A3CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2CE09D7A-B67C-4586-8432-64EA2D1A3CE4}.Release|Any CPU.Build.0 = Release|Any CPU
{EE6F0C99-61D1-4E2E-8185-FBA0D246D5C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE6F0C99-61D1-4E2E-8185-FBA0D246D5C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE6F0C99-61D1-4E2E-8185-FBA0D246D5C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE6F0C99-61D1-4E2E-8185-FBA0D246D5C7}.Release|Any CPU.Build.0 = Release|Any CPU
{F3D2DFDB-95FB-4CBB-A624-35EB6550854D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F3D2DFDB-95FB-4CBB-A624-35EB6550854D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F3D2DFDB-95FB-4CBB-A624-35EB6550854D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F3D2DFDB-95FB-4CBB-A624-35EB6550854D}.Release|Any CPU.Build.0 = Release|Any CPU
{E0F13AA9-8083-47CA-B10D-93C5285D1505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E0F13AA9-8083-47CA-B10D-93C5285D1505}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E0F13AA9-8083-47CA-B10D-93C5285D1505}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E0F13AA9-8083-47CA-B10D-93C5285D1505}.Release|Any CPU.Build.0 = Release|Any CPU
{5623CB62-59C1-49BC-BB16-4C5D63D82DAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5623CB62-59C1-49BC-BB16-4C5D63D82DAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5623CB62-59C1-49BC-BB16-4C5D63D82DAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5623CB62-59C1-49BC-BB16-4C5D63D82DAC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{2323BE09-7036-4FA7-B5B5-63046BE825E8} = {8202B92A-A573-4365-8A15-E246504A7CBD}
{2B756425-AB8D-4A78-80C5-13EA97C1AC73} = {8202B92A-A573-4365-8A15-E246504A7CBD}
{CC05A6F0-D8FF-498C-80F0-59DC9AAEB08E} = {8202B92A-A573-4365-8A15-E246504A7CBD}
{2CE09D7A-B67C-4586-8432-64EA2D1A3CE4} = {8202B92A-A573-4365-8A15-E246504A7CBD}
{EE6F0C99-61D1-4E2E-8185-FBA0D246D5C7} = {E91F80AA-3D61-4C28-B876-3EDFB5921E7D}
{F3D2DFDB-95FB-4CBB-A624-35EB6550854D} = {E91F80AA-3D61-4C28-B876-3EDFB5921E7D}
{E0F13AA9-8083-47CA-B10D-93C5285D1505} = {E91F80AA-3D61-4C28-B876-3EDFB5921E7D}
{5623CB62-59C1-49BC-BB16-4C5D63D82DAC} = {8202B92A-A573-4365-8A15-E246504A7CBD}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {50B0D1F3-D832-4C6C-858E-24F5F3B33632}
EndGlobalSection
GlobalSection(SharedMSBuildProjectFiles) = preSolution
..\..\src\Containers\Prism.DryIoc.Shared\Prism.DryIoc.Shared.projitems*{2ce09d7a-b67c-4586-8432-64ea2d1a3ce4}*SharedItemsImports = 5
EndGlobalSection
EndGlobal
================================================
FILE: e2e/README.md
================================================
# End to End Apps
The End to End apps here are used for both local testing and development and in some cases for full UI Testing integrations in the Build Pipeline. These are not necessarily examples meant to demonstrate best practices. They are however meant to provide the team the ability to validate functionality.
# Stable samples
More complete and stable samples showing how to use Prism for your application development will be posted in separate repositories under the [PrismLibrary GitHub organization](https://github.com/PrismLibrary). These samples are based on public released NuGet packages and are thus more stable than the sandbox samples. Guidance on specific scenarios can be found in these stable samples.
* [WPF](https://github.com/PrismLibrary/Prism-Samples-Wpf)
* [Xamarin Forms](https://github.com/PrismLibrary/Prism-Samples-Forms)
================================================
FILE: e2e/Uno/.gitignore
================================================
!*.pubxml
================================================
FILE: e2e/Uno/Directory.Build.props
================================================
net10.0enableenabletruetrue$(NoWarn);NU1507;NETSDK1201;PRI257false
================================================
FILE: e2e/Uno/Directory.Build.targets
================================================
================================================
FILE: e2e/Uno/HelloWorld/App.cs
================================================
using HelloWorld.Views;
using ModuleA;
using Uno.UI;
namespace HelloWorld;
public class App : PrismApplication
{
protected override UIElement CreateShell()
{
return Container.Resolve();
}
protected override void ConfigureHost(IHostBuilder builder)
{
builder
#if DEBUG
// Switch to Development environment when running in DEBUG
.UseEnvironment(Environments.Development)
#endif
.UseLogging(configure: (context, logBuilder) =>
{
// Configure log levels for different categories of logging
logBuilder.SetMinimumLevel(
context.HostingEnvironment.IsDevelopment() ?
LogLevel.Information :
LogLevel.Warning);
}, enableUnoLogging: true)
.UseSerilog(consoleLoggingEnabled: true, fileLoggingEnabled: true)
// Register Json serializers (ISerializer and ISerializer)
.UseSerialization()
.ConfigureServices((context, services) =>
{
// TODO: Register your services
//services.AddSingleton();
});
}
protected override void ConfigureWindow(Window window)
{
#if DEBUG
window.EnableHotReload();
#endif
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
// Register types with the container or for Navigation
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
moduleCatalog.AddModule();
}
}
================================================
FILE: e2e/Uno/HelloWorld/AppResources.xaml
================================================
================================================
FILE: e2e/Uno/HelloWorld/Assets/SharedAssets.md
================================================
# Shared Assets
See documentation about assets here: https://github.com/unoplatform/uno/blob/master/doc/articles/features/working-with-assets.md
## Here is a cheat sheet
1. Add the image file to the `Assets` directory of a shared project.
2. Set the build action to `Content`.
3. (Recommended) Provide an asset for various scales/dpi
### Examples
```text
\Assets\Images\logo.scale-100.png
\Assets\Images\logo.scale-200.png
\Assets\Images\logo.scale-400.png
\Assets\Images\scale-100\logo.png
\Assets\Images\scale-200\logo.png
\Assets\Images\scale-400\logo.png
```
### Table of scales
| Scale | WinUI | iOS/MacCatalyst | Android |
|-------|:-----------:|:---------------:|:-------:|
| `100` | scale-100 | @1x | mdpi |
| `125` | scale-125 | N/A | N/A |
| `150` | scale-150 | N/A | hdpi |
| `200` | scale-200 | @2x | xhdpi |
| `300` | scale-300 | @3x | xxhdpi |
| `400` | scale-400 | N/A | xxxhdpi |
================================================
FILE: e2e/Uno/HelloWorld/GlobalUsings.cs
================================================
global using System.Collections.Immutable;
global using System.Windows.Input;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.Hosting;
global using Microsoft.Extensions.Logging;
global using Microsoft.UI.Xaml;
global using Microsoft.UI.Xaml.Controls;
global using Microsoft.UI.Xaml.Media;
global using Microsoft.UI.Xaml.Navigation;
global using Uno.Extensions;
global using Uno.Extensions.Hosting;
global using Uno.Extensions.Logging;
global using Uno.Toolkit.UI;
global using Windows.ApplicationModel;
global using Windows.Networking.Connectivity;
global using Windows.Storage;
global using Prism.DryIoc;
global using Application = Microsoft.UI.Xaml.Application;
global using ApplicationExecutionState = Windows.ApplicationModel.Activation.ApplicationExecutionState;
================================================
FILE: e2e/Uno/HelloWorld/HelloWorld.csproj
================================================
$(TargetFrameworks);$(DotNetVersion)-windows10.0.22621$(TargetFrameworks);$(DotNetVersion);$(DotNetVersion)-android;$(DotNetVersion)-ios;$(DotNetVersion)-maccatalyst$(OverrideTargetFramework)true
================================================
FILE: e2e/Uno/HelloWorld/Strings/en/Resources.resw
================================================
text/microsoft-resx2.0System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089HelloWorld-en
================================================
FILE: e2e/Uno/HelloWorld/Styles/ColorPaletteOverride.xaml
================================================
#5B4CF5#67E5AD#F4F4F4#FFFFFF#000000#F85977#FFFFFF#000000#000000#FFFFFF#2F81D8#FFFFFF#FEB839#000000#000000#FFFFFF#0F0F0F#FFFFFF#B2213C#FFFFFF
================================================
FILE: e2e/Uno/HelloWorld/ViewModels/ShellViewModel.cs
================================================
namespace HelloWorld.ViewModels;
public class ShellViewModel : BindableBase
{
public string Title { get; set; } = "Hello Prism for Uno.WinUI";
private readonly IRegionManager _regionManager;
public DelegateCommand NavigateCommand { get; }
public ShellViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
NavigateCommand = new DelegateCommand(ExecuteNavigateCommand);
}
private void ExecuteNavigateCommand(string viewName)
{
_regionManager.RequestNavigate("ContentRegion", viewName);
}
}
================================================
FILE: e2e/Uno/HelloWorld/Views/Shell.xaml
================================================
================================================
FILE: e2e/Uno/HelloWorld/Views/Shell.xaml.cs
================================================
using Uno.Toolkit;
namespace HelloWorld.Views;
///
/// An empty page that can be used on its own or navigated to within a Frame.
///
public sealed partial class Shell : Page, ILoadableShell
{
private readonly CompositeLoadableSource _loadable;
public Shell()
{
this.InitializeComponent();
_loadable = new ()
{
IsExecuting = true
};
Splash.Source = _loadable;
}
public void FinishLoading()
{
_loadable.IsExecuting = false;
}
}
================================================
FILE: e2e/Uno/HelloWorld.Mobile/Android/AndroidManifest.xml
================================================
================================================
FILE: e2e/Uno/HelloWorld.Mobile/Android/Assets/AboutAssets.txt
================================================
To add cross-platform image assets for your Uno Platform app, use the Assets folder
in the shared project instead. Assets in this folder are Android-only assets.
Any raw assets you want to be deployed with your application can be placed in
this directory (and child directories) and given a Build Action of "AndroidAsset".
These files will be deployed with you package and will be accessible using Android's
AssetManager, like this:
public class ReadAsset : Activity
{
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
InputStream input = Assets.Open ("my_asset.txt");
}
}
Additionally, some Android functions will automatically load asset files:
Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
================================================
FILE: e2e/Uno/HelloWorld.Mobile/Android/Main.Android.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Com.Nostra13.Universalimageloader.Core;
using Microsoft.UI.Xaml.Media;
namespace HelloWorld.Droid;
[global::Android.App.ApplicationAttribute(
Label = "@string/ApplicationName",
Icon = "@mipmap/icon",
LargeHeap = true,
HardwareAccelerated = true,
Theme = "@style/AppTheme"
)]
public class Application : Microsoft.UI.Xaml.NativeApplication
{
public Application(IntPtr javaReference, JniHandleOwnership transfer)
: base(() => new AppHead(), javaReference, transfer)
{
ConfigureUniversalImageLoader();
}
private static void ConfigureUniversalImageLoader()
{
// Create global configuration and initialize ImageLoader with this config
ImageLoaderConfiguration config = new ImageLoaderConfiguration
.Builder(Context)
.Build();
ImageLoader.Instance.Init(config);
ImageSource.DefaultImageLoader = ImageLoader.Instance.LoadImageAsync;
}
}
================================================
FILE: e2e/Uno/HelloWorld.Mobile/Android/MainActivity.Android.cs
================================================
using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Views;
using Android.Widget;
namespace HelloWorld.Droid;
[Activity(
MainLauncher = true,
ConfigurationChanges = global::Uno.UI.ActivityHelper.AllConfigChanges,
WindowSoftInputMode = SoftInput.AdjustNothing | SoftInput.StateHidden
)]
public class MainActivity : Microsoft.UI.Xaml.ApplicationActivity
{
}
================================================
FILE: e2e/Uno/HelloWorld.Mobile/Android/Resources/AboutResources.txt
================================================
To add cross-platform image assets for your Uno Platform app, use the Assets folder
in the shared project instead. Resources in this folder are Android-only.
Images, layout descriptions, binary blobs and string dictionaries can be included
in your application as resource files. Various Android APIs are designed to
operate on the resource IDs instead of dealing with images, strings or binary blobs
directly.
For example, a sample Android app that contains a user interface layout (main.axml),
an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
would keep its resources in the "Resources" directory of the application:
Resources/
drawable/
icon.png
layout/
main.axml
values/
strings.xml
In order to get the build system to recognize Android resources, set the build action to
"AndroidResource". The native Android APIs do not operate directly with filenames, but
instead operate on resource IDs. When you compile an Android application that uses resources,
the build system will package the resources for distribution and generate a class called "R"
(this is an Android convention) that contains the tokens for each one of the resources
included. For example, for the above Resources layout, this is what the R class would expose:
public class R {
public class drawable {
public const int icon = 0x123;
}
public class layout {
public const int main = 0x456;
}
public class strings {
public const int first_string = 0xabc;
public const int second_string = 0xbcd;
}
}
You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main
to reference the layout/main.axml file, or R.strings.first_string to reference the first
string in the dictionary file values/strings.xml.
================================================
FILE: e2e/Uno/HelloWorld.Mobile/Android/Resources/values/Strings.xml
================================================
Hello World, Click Me!HelloWorld
================================================
FILE: e2e/Uno/HelloWorld.Mobile/Android/Resources/values/Styles.xml
================================================
================================================
FILE: e2e/Uno/HelloWorld.Mobile/Android/environment.conf
================================================
# See this for more details: http://developer.xamarin.com/guides/android/advanced_topics/garbage_collection/
MONO_GC_PARAMS=bridge-implementation=tarjan,nursery-size=32m,soft-heap-limit=256m
================================================
FILE: e2e/Uno/HelloWorld.Mobile/HelloWorld.Mobile.csproj
================================================
$(DotNetVersion)-android;$(DotNetVersion)-ios;$(DotNetVersion)-maccatalyst$(OverrideTargetFramework)trueExeHelloWorldcom.prismlibrary.unoe2e99E7FC0B-E6B5-4000-B84D-21FBA59E0E451.01Truetrue$(MtouchExtraArgs) --setenv=MONO_GC_PARAMS=soft-heap-limit=512m,nursery-size=64m,evacuation-threshold=66,major=marksweep,concurrent-sweep$(MtouchExtraArgs) --registrar:static$(MtouchExtraArgs) --marshal-objectivec-exceptions:disable$(MtouchExtraArgs) --setenv=MONO_GC_PARAMS=soft-heap-limit=512m,nursery-size=64m,evacuation-threshold=66,major=marksweep,concurrent-sweep$(MtouchExtraArgs) --registrar:staticfalse$(MtouchExtraArgs) --marshal-objectivec-exceptions:disable
================================================
FILE: e2e/Uno/HelloWorld.Mobile/MacCatalyst/Entitlements.plist
================================================
================================================
FILE: e2e/Uno/HelloWorld.Mobile/MacCatalyst/Info.plist
================================================
UIDeviceFamily2LSApplicationCategoryTypepublic.app-category.utilitiesUISupportedInterfaceOrientationsUIInterfaceOrientationPortraitUIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRightXSAppIconAssetsAssets.xcassets/icon.appiconset
================================================
FILE: e2e/Uno/HelloWorld.Mobile/MacCatalyst/Main.maccatalyst.cs
================================================
using UIKit;
namespace HelloWorld.MacCatalyst;
public class EntryPoint
{
// This is the main entry point of the application.
public static void Main(string[] args)
{
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main(args, null, typeof(AppHead));
}
}
================================================
FILE: e2e/Uno/HelloWorld.Mobile/MacCatalyst/Media.xcassets/LaunchImages.launchimage/Contents.json
================================================
{
"images": [
{
"orientation": "portrait",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "2x",
"size": "640x960",
"idiom": "iphone"
},
{
"orientation": "portrait",
"extent": "full-screen",
"minimum-system-version": "7.0",
"subtype": "retina4",
"scale": "2x",
"size": "640x1136",
"idiom": "iphone"
},
{
"orientation": "portrait",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "1x",
"size": "768x1024",
"idiom": "ipad"
},
{
"orientation": "landscape",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "1x",
"size": "1024x768",
"idiom": "ipad"
},
{
"orientation": "portrait",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "2x",
"size": "1536x2048",
"idiom": "ipad"
},
{
"orientation": "landscape",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "2x",
"size": "2048x1536",
"idiom": "ipad"
}
],
"properties": {},
"info": {
"version": 1,
"author": ""
}
}
================================================
FILE: e2e/Uno/HelloWorld.Mobile/iOS/Entitlements.plist
================================================
================================================
FILE: e2e/Uno/HelloWorld.Mobile/iOS/Info.plist
================================================
LSRequiresIPhoneOSUIDeviceFamily12UIRequiredDeviceCapabilitiesarmv7arm64UISupportedInterfaceOrientationsUIInterfaceOrientationPortraitUIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRightUISupportedInterfaceOrientations~ipadUIInterfaceOrientationPortraitUIInterfaceOrientationPortraitUpsideDownUIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRightUIViewControllerBasedStatusBarAppearanceXSAppIconAssetsAssets.xcassets/icon.appiconsetUIApplicationSupportsIndirectInputEvents
================================================
FILE: e2e/Uno/HelloWorld.Mobile/iOS/Main.iOS.cs
================================================
using UIKit;
namespace HelloWorld.iOS;
public class EntryPoint
{
// This is the main entry point of the application.
public static void Main(string[] args)
{
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main(args, null, typeof(AppHead));
}
}
================================================
FILE: e2e/Uno/HelloWorld.Mobile/iOS/Media.xcassets/LaunchImages.launchimage/Contents.json
================================================
{
"images": [
{
"orientation": "portrait",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "2x",
"size": "640x960",
"idiom": "iphone"
},
{
"orientation": "portrait",
"extent": "full-screen",
"minimum-system-version": "7.0",
"subtype": "retina4",
"scale": "2x",
"size": "640x1136",
"idiom": "iphone"
},
{
"orientation": "portrait",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "1x",
"size": "768x1024",
"idiom": "ipad"
},
{
"orientation": "landscape",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "1x",
"size": "1024x768",
"idiom": "ipad"
},
{
"orientation": "portrait",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "2x",
"size": "1536x2048",
"idiom": "ipad"
},
{
"orientation": "landscape",
"extent": "full-screen",
"minimum-system-version": "7.0",
"scale": "2x",
"size": "2048x1536",
"idiom": "ipad"
}
],
"properties": {},
"info": {
"version": 1,
"author": ""
}
}
================================================
FILE: e2e/Uno/HelloWorld.Shared/AppHead.xaml
================================================
================================================
FILE: e2e/Uno/HelloWorld.Shared/AppHead.xaml.cs
================================================
using System;
using Microsoft.UI.Xaml;
using Uno.Resizetizer;
namespace HelloWorld;
public sealed partial class AppHead : App
{
///
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
///
public AppHead()
{
this.InitializeComponent();
}
}
================================================
FILE: e2e/Uno/HelloWorld.Shared/HelloWorld.Shared.csproj
================================================
$(DotNetVersion)false
================================================
FILE: e2e/Uno/HelloWorld.Shared/base.props
================================================
================================================
FILE: e2e/Uno/HelloWorld.Skia.Gtk/HelloWorld.Skia.Gtk.csproj
================================================
WinExeExe$(DotNetVersion)app.manifest
================================================
FILE: e2e/Uno/HelloWorld.Skia.Gtk/Package.appxmanifest
================================================
HelloWorldHelloWorld
================================================
FILE: e2e/Uno/HelloWorld.Skia.Gtk/Program.cs
================================================
using System;
using GLib;
using Uno.UI.Runtime.Skia.Gtk;
namespace HelloWorld.Skia.Gtk;
public class Program
{
public static void Main(string[] args)
{
ExceptionManager.UnhandledException += delegate (UnhandledExceptionArgs expArgs)
{
Console.WriteLine("GLIB UNHANDLED EXCEPTION" + expArgs.ExceptionObject.ToString());
expArgs.ExitApplication = true;
};
var host = new GtkHost(() => new AppHead());
host.Run();
}
}
================================================
FILE: e2e/Uno/HelloWorld.Skia.Gtk/app.manifest
================================================
true/PMPerMonitorV2, PerMonitor
================================================
FILE: e2e/Uno/HelloWorld.Skia.Linux.FrameBuffer/HelloWorld.Skia.Linux.FrameBuffer.csproj
================================================
WinExeExe$(DotNetVersion)
================================================
FILE: e2e/Uno/HelloWorld.Skia.Linux.FrameBuffer/Program.cs
================================================
using System;
using Microsoft.UI.Xaml;
using Uno.UI.Runtime.Skia;
using Windows.UI.Core;
namespace HelloWorld.Skia.Framebuffer;
public class Program
{
public static void Main(string[] args)
{
try
{
Console.CursorVisible = false;
var host = new FrameBufferHost(() =>
{
if (CoreWindow.GetForCurrentThread() is { } window)
{
// Framebuffer applications don't have a WindowManager to rely
// on. To close the application, we can hook onto CoreWindow events
// which dispatch keyboard input, and close the application as a result.
// This block can be moved to App.xaml.cs if it does not interfere with other
// platforms that may use the same keys.
window.KeyDown += (s, e) =>
{
if (e.VirtualKey == Windows.System.VirtualKey.F12)
{
Application.Current.Exit();
}
};
}
return new AppHead();
});
host.Run();
}
finally
{
Console.CursorVisible = true;
}
}
}
================================================
FILE: e2e/Uno/HelloWorld.Skia.Linux.FrameBuffer/app.manifest
================================================
true/PMPerMonitorV2, PerMonitor
================================================
FILE: e2e/Uno/HelloWorld.Skia.WPF/HelloWorld.Skia.WPF.csproj
================================================
WinExeExe$(DotNetVersion)-windowstrue
<_Parameter1>false
<_Parameter1>System.Windows.ResourceDictionaryLocation.None
<_Parameter1_IsLiteral>true
<_Parameter2>System.Windows.ResourceDictionaryLocation.SourceAssembly
<_Parameter2_IsLiteral>true
================================================
FILE: e2e/Uno/HelloWorld.Skia.WPF/Wpf/App.xaml
================================================
================================================
FILE: e2e/Uno/HelloWorld.Skia.WPF/Wpf/App.xaml.cs
================================================
using WpfApp = System.Windows.Application;
using Uno.UI.Runtime.Skia.Wpf;
namespace HelloWorld.WPF;
public partial class App : WpfApp
{
public App()
{
var host = new WpfHost(Dispatcher, () => new AppHead());
host.Run();
}
}
================================================
FILE: e2e/Uno/HelloWorld.Wasm/HelloWorld.Wasm.csproj
================================================
Exe$(DotNetVersion)$(NoWarn);NU1504;NU1505;NU1701disablemanifest.webmanifestProperties/true$(DefineConstants);TRACE;DEBUGportabletruefalse
================================================
FILE: e2e/Uno/HelloWorld.Wasm/LinkerConfig.xml
================================================
================================================
FILE: e2e/Uno/HelloWorld.Wasm/Program.cs
================================================
namespace HelloWorld.Wasm;
public class Program
{
private static App? _app;
public static int Main(string[] args)
{
Microsoft.UI.Xaml.Application.Start(_ => _app = new AppHead());
return 0;
}
}
================================================
FILE: e2e/Uno/HelloWorld.Wasm/Properties/launchSettings.json
================================================
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:8080",
"sslPort": 0
}
},
"profiles": {
"HelloWorld.Wasm": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5001",
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
================================================
FILE: e2e/Uno/HelloWorld.Wasm/WasmCSS/Fonts.css
================================================
/**
When adding fonts here, make sure to add them using a base64 data uri, otherwise
fonts loading are delayed, and text may get displayed incorrectly.
*/
/* https://github.com/unoplatform/uno/issues/3954 */
@font-face {
font-family: 'Segoe UI';
src: local('Segoe UI'), local('-apple-system'), local('BlinkMacSystemFont'), local('Inter'), local('Cantarell'), local('Ubuntu'), local('Roboto'), local('Open Sans'), local('Noto Sans'), local('Helvetica Neue'), local('sans-serif');
}
@font-face {
font-family: 'Roboto';
src: url(./Uno.Fonts.Roboto/Fonts/Roboto-Light.ttf) format('truetype');
font-weight: 300;
}
@font-face {
font-family: 'Roboto';
src: url(./Uno.Fonts.Roboto/Fonts/Roboto-Regular.ttf) format('truetype');
font-weight: 400;
}
@font-face {
font-family: 'Roboto';
src: url(./Uno.Fonts.Roboto/Fonts/Roboto-Medium.ttf) format('truetype');
font-weight: 500;
}
================================================
FILE: e2e/Uno/HelloWorld.Wasm/WasmScripts/AppManifest.js
================================================
var UnoAppManifest = {
displayName: "HelloWorld"
}
================================================
FILE: e2e/Uno/HelloWorld.Wasm/manifest.webmanifest
================================================
{
"background_color": "#ffffff",
"description": "HelloWorld",
"display": "standalone",
"name": "HelloWorld",
"short_name": "HelloWorld",
"start_url": "/index.html",
"theme_color": "#ffffff",
"scope": "/"
}
================================================
FILE: e2e/Uno/HelloWorld.Wasm/wwwroot/staticwebapp.config.json
================================================
{
"navigationFallback": {
"rewrite": "/index.html",
"exclude": [
"*.{css,js}",
"*.{png}",
"*.{c,h,wasm,clr,pdb,dat,txt}"
]
},
"routes": [
{
"route": "/package_*",
"headers": {
"cache-control": "public, immutable, max-age=31536000"
}
},
{
"route": "/*.ttf",
"headers": {
"cache-control": "public, immutable, max-age=31536000"
}
},
{
"route": "/*",
"headers": {
"cache-control": "must-revalidate, max-age=3600"
}
}
]
}
================================================
FILE: e2e/Uno/HelloWorld.Wasm/wwwroot/web.config
================================================
================================================
FILE: e2e/Uno/HelloWorld.Windows/HelloWorld.Windows.csproj
================================================
WinExe$(DotNetVersion)-windows10.0.22621.0HelloWorld.Windowsx86;x64;arm64true
================================================
FILE: e2e/Uno/HelloWorld.Windows/Package.appxmanifest
================================================
HelloWorldHelloWorld
================================================
FILE: e2e/Uno/HelloWorld.Windows/Properties/PublishProfiles/win-arm64.pubxml
================================================
FileSystemarm64win-arm64bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\trueFalseFalseTrue
================================================
FILE: e2e/Uno/HelloWorld.Windows/Properties/PublishProfiles/win-x64.pubxml
================================================
FileSystemx64win-x64bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\trueFalseFalseTrue
================================================
FILE: e2e/Uno/HelloWorld.Windows/Properties/PublishProfiles/win-x86.pubxml
================================================
FileSystemx86win-x86bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\trueFalseFalseTrue
================================================
FILE: e2e/Uno/HelloWorld.Windows/Properties/launchsettings.json
================================================
{
"profiles": {
"HelloWorld.Windows (Unpackaged)": {
"commandName": "Project"
},
"HelloWorld.Windows (Package)": {
"commandName": "MsixPackage"
}
}
}
================================================
FILE: e2e/Uno/HelloWorld.Windows/Resources.lang-en-us.resw
================================================
text/microsoft-resx2.0System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Hello World!
================================================
FILE: e2e/Uno/HelloWorld.Windows/app.manifest
================================================
true/PMPerMonitorV2, PerMonitor
================================================
FILE: e2e/Uno/HelloWorld.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32210.308
MinimumVisualStudioVersion = 15.0.26124.0
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sample", "sample", "{5E74EB0D-FBD3-4399-8F38-AD888DEFFC73}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platforms", "Platforms", "{660A1FE2-C440-402C-A5DC-6901F5FBED61}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld", "HelloWorld\HelloWorld.csproj", "{09C2B6C8-E492-49E7-A598-18E8881646C8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld.Mobile", "HelloWorld.Mobile\HelloWorld.Mobile.csproj", "{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld.Wasm", "HelloWorld.Wasm\HelloWorld.Wasm.csproj", "{98201B97-26AE-4FA1-845C-AC7FE025848D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld.Skia.Gtk", "HelloWorld.Skia.Gtk\HelloWorld.Skia.Gtk.csproj", "{39B16098-4E39-49C4-9C74-BD5D809F4432}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld.Skia.WPF", "HelloWorld.Skia.WPF\HelloWorld.Skia.WPF.csproj", "{7D45AF78-BEC3-44AD-9A8C-3784FB638495}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld.Windows", "HelloWorld.Windows\HelloWorld.Windows.csproj", "{92F6D561-4134-444D-8E86-4AD4BF6443C7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld.Skia.Linux.FrameBuffer", "HelloWorld.Skia.Linux.FrameBuffer\HelloWorld.Skia.Linux.FrameBuffer.csproj", "{B4A1BD15-DA72-4933-BD26-01E5E43279F8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BADA71DC-7FFD-4EDC-9F28-FB74AEADC713}"
ProjectSection(SolutionItems) = preProject
Directory.Build.props = Directory.Build.props
Directory.Build.targets = Directory.Build.targets
..\..\Directory.Packages.props = ..\..\Directory.Packages.props
..\..\global.json = ..\..\global.json
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{2C5D7523-6030-4B75-ABE0-3CB8AA0953CB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Core", "..\..\src\Prism.Core\Prism.Core.csproj", "{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Uno.WinUI", "..\..\src\Uno\Prism.Uno\Prism.Uno.WinUI.csproj", "{FDA1EB82-8ED3-4284-842D-9E7732CB328C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Uno.WinUI", "..\..\src\Uno\Prism.DryIoc.Uno\Prism.DryIoc.Uno.WinUI.csproj", "{8D59D64C-EAF1-4BF7-9E69-556114C96A95}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{F67BA438-F236-460B-B279-A71AB8033B54}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ModuleA", "ModuleA\ModuleA.csproj", "{5AD22541-BC5D-45E0-9C95-87B51300FF1C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Events", "..\..\src\Prism.Events\Prism.Events.csproj", "{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld.Shared", "HelloWorld.Shared\HelloWorld.Shared.csproj", "{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|ARM64 = Debug|ARM64
Debug|iPhone = Debug|iPhone
Debug|iPhoneSimulator = Debug|iPhoneSimulator
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|iPhone = Release|iPhone
Release|iPhoneSimulator = Release|iPhoneSimulator
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|ARM.ActiveCfg = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|ARM.Build.0 = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|ARM64.Build.0 = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|iPhone.Build.0 = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|x64.ActiveCfg = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|x64.Build.0 = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|x86.ActiveCfg = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Debug|x86.Build.0 = Debug|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|Any CPU.Build.0 = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|ARM.ActiveCfg = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|ARM.Build.0 = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|ARM64.ActiveCfg = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|ARM64.Build.0 = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|iPhone.ActiveCfg = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|iPhone.Build.0 = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|x64.ActiveCfg = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|x64.Build.0 = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|x86.ActiveCfg = Release|Any CPU
{09C2B6C8-E492-49E7-A598-18E8881646C8}.Release|x86.Build.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|ARM.ActiveCfg = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|ARM.Build.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|ARM.Deploy.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|ARM64.Build.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|ARM64.Deploy.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|iPhone.Build.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|x64.ActiveCfg = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|x64.Build.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|x64.Deploy.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|x86.ActiveCfg = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|x86.Build.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Debug|x86.Deploy.0 = Debug|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|Any CPU.Build.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|Any CPU.Deploy.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|ARM.ActiveCfg = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|ARM.Build.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|ARM.Deploy.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|ARM64.ActiveCfg = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|ARM64.Build.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|ARM64.Deploy.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|iPhone.ActiveCfg = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|iPhone.Build.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|iPhone.Deploy.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|x64.ActiveCfg = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|x64.Build.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|x64.Deploy.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|x86.ActiveCfg = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|x86.Build.0 = Release|Any CPU
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF}.Release|x86.Deploy.0 = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|ARM.ActiveCfg = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|ARM.Build.0 = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|ARM64.Build.0 = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|iPhone.Build.0 = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|x64.ActiveCfg = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|x64.Build.0 = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|x86.ActiveCfg = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Debug|x86.Build.0 = Debug|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|Any CPU.Build.0 = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|ARM.ActiveCfg = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|ARM.Build.0 = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|ARM64.ActiveCfg = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|ARM64.Build.0 = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|iPhone.ActiveCfg = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|iPhone.Build.0 = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|x64.ActiveCfg = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|x64.Build.0 = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|x86.ActiveCfg = Release|Any CPU
{98201B97-26AE-4FA1-845C-AC7FE025848D}.Release|x86.Build.0 = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|Any CPU.Build.0 = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|ARM.ActiveCfg = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|ARM.Build.0 = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|ARM64.Build.0 = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|iPhone.Build.0 = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|x64.ActiveCfg = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|x64.Build.0 = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|x86.ActiveCfg = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Debug|x86.Build.0 = Debug|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|Any CPU.ActiveCfg = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|Any CPU.Build.0 = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|ARM.ActiveCfg = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|ARM.Build.0 = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|ARM64.ActiveCfg = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|ARM64.Build.0 = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|iPhone.ActiveCfg = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|iPhone.Build.0 = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|x64.ActiveCfg = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|x64.Build.0 = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|x86.ActiveCfg = Release|Any CPU
{39B16098-4E39-49C4-9C74-BD5D809F4432}.Release|x86.Build.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|ARM.ActiveCfg = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|ARM.Build.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|ARM.Deploy.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|ARM64.Build.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|ARM64.Deploy.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|iPhone.Build.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|x64.ActiveCfg = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|x64.Build.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|x64.Deploy.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|x86.ActiveCfg = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|x86.Build.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Debug|x86.Deploy.0 = Debug|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|ARM.ActiveCfg = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|ARM.Build.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|ARM.Deploy.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|ARM64.ActiveCfg = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|ARM64.Build.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|ARM64.Deploy.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|iPhone.ActiveCfg = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|iPhone.Build.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|x64.ActiveCfg = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|x64.Build.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|x64.Deploy.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|x86.ActiveCfg = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|x86.Build.0 = Release|Any CPU
{7D45AF78-BEC3-44AD-9A8C-3784FB638495}.Release|x86.Deploy.0 = Release|Any CPU
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|Any CPU.ActiveCfg = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|Any CPU.Build.0 = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|Any CPU.Deploy.0 = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|ARM.ActiveCfg = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|ARM.Build.0 = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|ARM.Deploy.0 = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|ARM64.ActiveCfg = Debug|arm64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|ARM64.Build.0 = Debug|arm64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|ARM64.Deploy.0 = Debug|arm64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|iPhone.ActiveCfg = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|iPhone.Build.0 = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|iPhone.Deploy.0 = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|iPhoneSimulator.Build.0 = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|iPhoneSimulator.Deploy.0 = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|x64.ActiveCfg = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|x64.Build.0 = Debug|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|x86.ActiveCfg = Debug|x86
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Debug|x86.Build.0 = Debug|x86
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|Any CPU.ActiveCfg = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|Any CPU.Build.0 = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|Any CPU.Deploy.0 = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|ARM.ActiveCfg = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|ARM.Build.0 = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|ARM64.ActiveCfg = Release|arm64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|ARM64.Build.0 = Release|arm64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|iPhone.ActiveCfg = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|iPhone.Build.0 = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|iPhoneSimulator.ActiveCfg = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|iPhoneSimulator.Build.0 = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|x64.ActiveCfg = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|x64.Build.0 = Release|x64
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|x86.ActiveCfg = Release|x86
{92F6D561-4134-444D-8E86-4AD4BF6443C7}.Release|x86.Build.0 = Release|x86
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|ARM.Build.0 = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|ARM64.Build.0 = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|iPhone.Build.0 = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|x64.ActiveCfg = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|x64.Build.0 = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|x86.ActiveCfg = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Debug|x86.Build.0 = Debug|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|Any CPU.Build.0 = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|ARM.ActiveCfg = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|ARM.Build.0 = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|ARM64.ActiveCfg = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|ARM64.Build.0 = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|iPhone.ActiveCfg = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|iPhone.Build.0 = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|x64.ActiveCfg = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|x64.Build.0 = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|x86.ActiveCfg = Release|Any CPU
{B4A1BD15-DA72-4933-BD26-01E5E43279F8}.Release|x86.Build.0 = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|ARM.ActiveCfg = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|ARM.Build.0 = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|ARM64.Build.0 = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|iPhone.Build.0 = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|x64.ActiveCfg = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|x64.Build.0 = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|x86.ActiveCfg = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Debug|x86.Build.0 = Debug|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|Any CPU.Build.0 = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|ARM.ActiveCfg = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|ARM.Build.0 = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|ARM64.ActiveCfg = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|ARM64.Build.0 = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|iPhone.ActiveCfg = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|iPhone.Build.0 = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|x64.ActiveCfg = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|x64.Build.0 = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|x86.ActiveCfg = Release|Any CPU
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882}.Release|x86.Build.0 = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|ARM.Build.0 = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|ARM64.Build.0 = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|iPhone.Build.0 = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|x64.ActiveCfg = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|x64.Build.0 = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|x86.ActiveCfg = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Debug|x86.Build.0 = Debug|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|Any CPU.Build.0 = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|ARM.ActiveCfg = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|ARM.Build.0 = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|ARM64.ActiveCfg = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|ARM64.Build.0 = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|iPhone.ActiveCfg = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|iPhone.Build.0 = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|x64.ActiveCfg = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|x64.Build.0 = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|x86.ActiveCfg = Release|Any CPU
{FDA1EB82-8ED3-4284-842D-9E7732CB328C}.Release|x86.Build.0 = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|ARM.ActiveCfg = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|ARM.Build.0 = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|ARM64.Build.0 = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|iPhone.Build.0 = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|x64.ActiveCfg = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|x64.Build.0 = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|x86.ActiveCfg = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Debug|x86.Build.0 = Debug|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|Any CPU.Build.0 = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|ARM.ActiveCfg = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|ARM.Build.0 = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|ARM64.ActiveCfg = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|ARM64.Build.0 = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|iPhone.ActiveCfg = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|iPhone.Build.0 = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|x64.ActiveCfg = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|x64.Build.0 = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|x86.ActiveCfg = Release|Any CPU
{8D59D64C-EAF1-4BF7-9E69-556114C96A95}.Release|x86.Build.0 = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|ARM.Build.0 = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|ARM64.Build.0 = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|iPhone.Build.0 = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|x64.ActiveCfg = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|x64.Build.0 = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|x86.ActiveCfg = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Debug|x86.Build.0 = Debug|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|Any CPU.Build.0 = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|ARM.ActiveCfg = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|ARM.Build.0 = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|ARM64.ActiveCfg = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|ARM64.Build.0 = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|iPhone.ActiveCfg = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|iPhone.Build.0 = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|x64.ActiveCfg = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|x64.Build.0 = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|x86.ActiveCfg = Release|Any CPU
{5AD22541-BC5D-45E0-9C95-87B51300FF1C}.Release|x86.Build.0 = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|ARM.ActiveCfg = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|ARM.Build.0 = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|ARM64.Build.0 = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|iPhone.Build.0 = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|x64.ActiveCfg = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|x64.Build.0 = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|x86.ActiveCfg = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Debug|x86.Build.0 = Debug|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|Any CPU.Build.0 = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|ARM.ActiveCfg = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|ARM.Build.0 = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|ARM64.ActiveCfg = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|ARM64.Build.0 = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|iPhone.ActiveCfg = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|iPhone.Build.0 = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|x64.ActiveCfg = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|x64.Build.0 = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|x86.ActiveCfg = Release|Any CPU
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930}.Release|x86.Build.0 = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|ARM.ActiveCfg = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|ARM.Build.0 = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|ARM64.Build.0 = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|iPhone.Build.0 = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|x64.ActiveCfg = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|x64.Build.0 = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|x86.ActiveCfg = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Debug|x86.Build.0 = Debug|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|Any CPU.Build.0 = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|ARM.ActiveCfg = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|ARM.Build.0 = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|ARM64.ActiveCfg = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|ARM64.Build.0 = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|iPhone.ActiveCfg = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|iPhone.Build.0 = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|x64.ActiveCfg = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|x64.Build.0 = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|x86.ActiveCfg = Release|Any CPU
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{660A1FE2-C440-402C-A5DC-6901F5FBED61} = {5E74EB0D-FBD3-4399-8F38-AD888DEFFC73}
{09C2B6C8-E492-49E7-A598-18E8881646C8} = {5E74EB0D-FBD3-4399-8F38-AD888DEFFC73}
{980A4C78-FF3E-4D3B-8D8C-FE78ADFCC3DF} = {660A1FE2-C440-402C-A5DC-6901F5FBED61}
{98201B97-26AE-4FA1-845C-AC7FE025848D} = {660A1FE2-C440-402C-A5DC-6901F5FBED61}
{39B16098-4E39-49C4-9C74-BD5D809F4432} = {660A1FE2-C440-402C-A5DC-6901F5FBED61}
{7D45AF78-BEC3-44AD-9A8C-3784FB638495} = {660A1FE2-C440-402C-A5DC-6901F5FBED61}
{92F6D561-4134-444D-8E86-4AD4BF6443C7} = {660A1FE2-C440-402C-A5DC-6901F5FBED61}
{B4A1BD15-DA72-4933-BD26-01E5E43279F8} = {660A1FE2-C440-402C-A5DC-6901F5FBED61}
{F6F81EE6-24C6-4D4E-A38D-8C4ECADF5882} = {2C5D7523-6030-4B75-ABE0-3CB8AA0953CB}
{FDA1EB82-8ED3-4284-842D-9E7732CB328C} = {2C5D7523-6030-4B75-ABE0-3CB8AA0953CB}
{8D59D64C-EAF1-4BF7-9E69-556114C96A95} = {2C5D7523-6030-4B75-ABE0-3CB8AA0953CB}
{F67BA438-F236-460B-B279-A71AB8033B54} = {5E74EB0D-FBD3-4399-8F38-AD888DEFFC73}
{5AD22541-BC5D-45E0-9C95-87B51300FF1C} = {F67BA438-F236-460B-B279-A71AB8033B54}
{ABC0F8AF-6FED-4C3E-80B3-54F1A7CC5930} = {2C5D7523-6030-4B75-ABE0-3CB8AA0953CB}
{28A534A3-3ADA-4435-B5F5-59FA61DF23EF} = {660A1FE2-C440-402C-A5DC-6901F5FBED61}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {757C5D89-969E-4F38-B8F1-3098C8E17307}
EndGlobalSection
GlobalSection(SharedMSBuildProjectFiles) = preSolution
..\..\src\Containers\Prism.DryIoc.Shared\Prism.DryIoc.Shared.projitems*{8d59d64c-eaf1-4bf7-9e69-556114c96a95}*SharedItemsImports = 5
EndGlobalSection
EndGlobal
================================================
FILE: e2e/Uno/ModuleA/Dialogs/AlertDialog.xaml
================================================
================================================
FILE: e2e/Uno/ModuleA/Dialogs/AlertDialog.xaml.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Data;
using Microsoft.UI.Xaml.Input;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Navigation;
using Windows.Foundation;
using Windows.Foundation.Collections;
// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236
namespace ModuleA.Dialogs
{
public sealed partial class AlertDialog : UserControl
{
public AlertDialog()
{
this.InitializeComponent();
}
}
}
================================================
FILE: e2e/Uno/ModuleA/Dialogs/AlertDialogViewModel.cs
================================================
namespace ModuleA.Dialogs;
internal class AlertDialogViewModel : BindableBase, IDialogAware
{
public AlertDialogViewModel()
{
CloseCommand = new DelegateCommand(() => RequestClose.Invoke(new DialogResult(ButtonResult.OK)));
}
private string _title = string.Empty;
public string Title
{
get => _title;
set => SetProperty(ref _title, value);
}
private string _message = string.Empty;
public string Message
{
get => _message;
set => SetProperty(ref _message, value);
}
public DelegateCommand CloseCommand { get; }
public DialogCloseListener RequestClose { get; }
public bool CanCloseDialog() => true;
public void OnDialogClosed()
{
}
public void OnDialogOpened(IDialogParameters parameters)
{
Title = parameters.GetValue("title");
Message = parameters.GetValue("message");
}
}
================================================
FILE: e2e/Uno/ModuleA/GlobalUsings.cs
================================================
global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Net.Http;
global using System.Threading;
global using System.Threading.Tasks;
global using Microsoft.UI.Xaml;
global using Microsoft.UI.Xaml.Controls;
global using Microsoft.UI.Xaml.Media;
global using Microsoft.UI.Xaml.Navigation;
================================================
FILE: e2e/Uno/ModuleA/ModuleA.csproj
================================================
$(DotNetVersion);$(DotNetVersion)-ios;$(DotNetVersion)-android;$(DotNetVersion)-maccatalyst$(TargetFrameworks);$(DotNetVersion)-windows10.0.22621$(OverrideTargetFramework)trueenable
================================================
FILE: e2e/Uno/ModuleA/ModuleAModule.cs
================================================
using ModuleA.Dialogs;
using ModuleA.Views;
using AlertDialog = ModuleA.Dialogs.AlertDialog;
namespace ModuleA;
public class ModuleAModule : IModule
{
private readonly IRegionManager _regionManager;
public ModuleAModule(IRegionManager regionManager)
{
_regionManager = regionManager;
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterDialog();
}
public void OnInitialized(IContainerProvider containerProvider)
{
//_regionManager.RegisterViewWithRegion("ContentRegion");
//_regionManager.RequestNavigate("ContentRegion", "ViewA");
}
}
================================================
FILE: e2e/Uno/ModuleA/ViewModels/ViewAViewModel.cs
================================================
using System.Windows.Input;
namespace ModuleA.ViewModels;
internal class ViewAViewModel : ViewModelBase
{
private readonly IDialogService _dialogService;
public ViewAViewModel(IRegionManager regionManager, IDialogService dialogService)
: base(regionManager)
{
_dialogService = dialogService;
ShowAlertCommand = new DelegateCommand(ShowDialog);
}
public ICommand ShowAlertCommand { get; }
private void ShowDialog()
{
_dialogService.ShowDialog("AlertDialog", new DialogParameters
{
{ "title", "Oh Snap" },
{ "message", "You can actually create much more amazing dialogs with Prism. Hello from ViewA!" }
});
}
}
================================================
FILE: e2e/Uno/ModuleA/ViewModels/ViewBViewModel.cs
================================================
namespace ModuleA.ViewModels;
internal class ViewBViewModel : ViewModelBase
{
public ViewBViewModel(IRegionManager regionManager)
: base(regionManager)
{
}
}
================================================
FILE: e2e/Uno/ModuleA/ViewModels/ViewModelBase.cs
================================================
using System.Collections.ObjectModel;
namespace ModuleA.ViewModels;
internal class ViewModelBase : BindableBase, IRegionAware
{
private readonly string _name;
protected IRegionManager RegionManager { get; }
protected ViewModelBase(IRegionManager regionManager)
{
RegionManager = regionManager;
Title = _name = GetType().Name.Replace("ViewModel", string.Empty);
}
private string _title = string.Empty;
public string Title
{
get => _title;
set => SetProperty(ref _title, value);
}
private ObservableCollection _messages = new();
public IEnumerable Messages => _messages;
public bool IsNavigationTarget(NavigationContext navigationContext) =>
navigationContext.NavigatedName() == _name;
public void OnNavigatedFrom(NavigationContext navigationContext)
{
_messages.Add("OnNavigatedFrom");
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
if (navigationContext.Parameters.TryGetValue("title", out string title))
{
Title = title;
}
_messages.Add("OnNavigatedTo");
}
}
================================================
FILE: e2e/Uno/ModuleA/Views/ViewA.xaml
================================================
================================================
FILE: e2e/Uno/ModuleA/Views/ViewA.xaml.cs
================================================
namespace ModuleA.Views;
public sealed partial class ViewA : UserControl
{
public ViewA()
{
this.InitializeComponent();
}
}
================================================
FILE: e2e/Uno/ModuleA/Views/ViewB.xaml
================================================
================================================
FILE: e2e/Uno/ModuleA/Views/ViewB.xaml.cs
================================================
namespace ModuleA.Views;
public sealed partial class ViewB : UserControl
{
public ViewB()
{
this.InitializeComponent();
}
}
================================================
FILE: e2e/Uno/solution-config.props.sample
================================================
================================================
FILE: e2e/Wpf/HelloWorld/App.config
================================================
================================================
FILE: e2e/Wpf/HelloWorld/App.xaml
================================================
================================================
FILE: e2e/Wpf/HelloWorld/App.xaml.cs
================================================
using HelloWorld.Views;
using Prism.Ioc;
using System.Windows;
using Prism.Modularity;
using HelloWorld.Modules.ModuleA;
namespace HelloWorld
{
///
/// Interaction logic for App.xaml
///
public partial class App
{
protected override Window CreateShell()
{
return Container.Resolve();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSharedSamples();
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
moduleCatalog.AddModule();
}
//to test various module catalogs:
//1. Comment out ConfigureModuleCatalog
//2. Remove the project reference to the module project
//3. Make sure the Modules directory exists in the output path when debugging
//4. Uncomment CreateModuleCatalog to test other modules catalogs
//5. Uncomment post build task in ModuleA.csproj
//protected override IModuleCatalog CreateModuleCatalog()
//{
// return new ConfigurationModuleCatalog();
// return new DirectoryModuleCatalog() { ModulePath = "Modules" };
// return new XamlModuleCatalog("ModuleCatalog.xaml");
//}
}
}
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/AnotherDialogWindow.xaml
================================================
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/AnotherDialogWindow.xaml.cs
================================================
using Prism.Dialogs;
using System.Windows;
namespace HelloWorld.Dialogs
{
///
/// Interaction logic for AnotherDialogWindow.xaml
///
public partial class AnotherDialogWindow : Window, IDialogWindow
{
public AnotherDialogWindow()
{
InitializeComponent();
}
public IDialogResult Result { get; set; }
}
}
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/ConfirmationDialog.xaml
================================================
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/ConfirmationDialog.xaml.cs
================================================
using System.Windows.Controls;
namespace HelloWorld.Dialogs
{
///
/// Interaction logic for ConfirmationDialog.xaml
///
public partial class ConfirmationDialog : UserControl
{
public ConfirmationDialog()
{
InitializeComponent();
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/ConfirmationDialogViewModel.cs
================================================
namespace HelloWorld.Dialogs
{
public class ConfirmationDialogViewModel : NotificationDialogViewModel
{
public ConfirmationDialogViewModel()
{
Title = "Confirmation";
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/CustomDialogWindow.xaml
================================================
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/CustomDialogWindow.xaml.cs
================================================
using Prism.Dialogs;
using System.Windows;
namespace HelloWorld.Dialogs
{
///
/// Interaction logic for CustomDialogWindow.xaml
///
public partial class CustomDialogWindow : Window, IDialogWindow
{
public CustomDialogWindow()
{
InitializeComponent();
}
public IDialogResult Result { get; set; }
}
}
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/DialogViewModelBase.cs
================================================
using Prism.Commands;
using Prism.Mvvm;
using Prism.Dialogs;
using System;
namespace HelloWorld.Dialogs
{
public class DialogViewModelBase : BindableBase, IDialogAware
{
private DelegateCommand _closeDialogCommand;
public DelegateCommand CloseDialogCommand =>
_closeDialogCommand ?? (_closeDialogCommand = new DelegateCommand(CloseDialog));
private string _title;
public string Title
{
get { return _title; }
set { SetProperty(ref _title, value); }
}
public DialogCloseListener RequestClose { get; }
protected virtual void CloseDialog(string parameter)
{
var result = parameter?.ToLower() switch
{
"true" => ButtonResult.OK,
"false" => ButtonResult.Cancel,
_ => ButtonResult.None
};
//RequestClose.Invoke(new DialogResult(result));
RequestClose.Invoke(result);
}
public virtual bool CanCloseDialog()
{
return true;
}
public virtual void OnDialogClosed()
{
}
public virtual void OnDialogOpened(IDialogParameters parameters)
{
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/NotificationDialog.xaml
================================================
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/NotificationDialog.xaml.cs
================================================
using System.Windows.Controls;
namespace HelloWorld.Dialogs
{
///
/// Interaction logic for NotificationDialog.xaml
///
public partial class NotificationDialog : UserControl
{
public NotificationDialog()
{
InitializeComponent();
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld/Dialogs/NotificationDialogViewModel.cs
================================================
using Prism.Dialogs;
namespace HelloWorld.Dialogs
{
public class NotificationDialogViewModel : DialogViewModelBase
{
private string _message;
public string Message
{
get { return _message; }
set { SetProperty(ref _message, value); }
}
public NotificationDialogViewModel()
{
Title = "Notification";
}
public override void OnDialogOpened(IDialogParameters parameters)
{
Message = parameters.GetValue("message");
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld/HelloWorld.csproj
================================================
WinExenet10.0-windows;net462trueHelloWorldHelloWorldprism-sandbox.icoMSBuild:Compile
================================================
FILE: e2e/Wpf/HelloWorld/ModuleCatalog.xaml
================================================
================================================
FILE: e2e/Wpf/HelloWorld/Properties/Resources.Designer.cs
================================================
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------
namespace HelloWorld.Properties
{
///
/// A strongly-typed resource class, for looking up localized strings, etc.
///
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
///
/// Returns the cached ResourceManager instance used by this class.
///
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HelloWorld.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
///
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
///
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld/Properties/Resources.resx
================================================
text/microsoft-resx2.0System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: e2e/Wpf/HelloWorld/Properties/Settings.Designer.cs
================================================
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------
namespace HelloWorld.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld/Properties/Settings.settings
================================================
================================================
FILE: e2e/Wpf/HelloWorld/SharedSampleRegistrations.cs
================================================
using HelloWorld.Dialogs;
using Prism.Ioc;
namespace HelloWorld
{
static class SharedSampleRegistrations
{
public static void RegisterSharedSamples(this IContainerRegistry containerRegistry)
{
containerRegistry.RegisterDialog();
containerRegistry.RegisterDialog();
//register a custom window host
containerRegistry.RegisterDialogWindow();
containerRegistry.RegisterDialogWindow(nameof(AnotherDialogWindow));
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld/ViewModels/MainWindowViewModel.cs
================================================
using System;
using HelloWorld.Core;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation.Regions;
using Prism.Dialogs;
namespace HelloWorld.ViewModels
{
public class MainWindowViewModel : BindableBase
{
private string _title = "Prism Application";
private readonly IDialogService _dialogService;
private readonly IRegionManager _regionManager;
public string Title
{
get { return _title; }
set { SetProperty(ref _title, value); }
}
public DelegateCommand ShowDialogCommand { get; private set; }
private DelegateCommand _navigate;
public DelegateCommand NavigateCommand =>
_navigate ?? (_navigate = new DelegateCommand(ExecuteNavigateCommand));
void ExecuteNavigateCommand(string parameter)
{
if (!string.IsNullOrWhiteSpace(parameter))
_regionManager.RequestNavigate("ContentRegion", parameter);
}
public MainWindowViewModel(IDialogService dialogService, IRegionManager regionManager)
{
_dialogService = dialogService;
_regionManager = regionManager;
ShowDialogCommand = new DelegateCommand(ShowDialog);
}
private void ShowDialog()
{
var message = "This is a message that should be shown in the dialog.";
//using the dialog service as-is
//_dialogService.Show("NotificationDialog", new DialogParameters($"message={message}"), r =>
//{
// if (r.Result == ButtonResult.None)
// Title = "Result is None";
// else if (r.Result == ButtonResult.OK)
// Title = "Result is OK";
// else if (r.Result == ButtonResult.Cancel)
// Title = "Result is Cancel";
// else
// Title = "I Don't know what you did!?";
//});
//using custom extenions methods to simplify the app's dialogs
//_dialogService.ShowNotification(message, r =>
//{
// if (r.Result == ButtonResult.None)
// Title = "Result is None";
// else if (r.Result == ButtonResult.OK)
// Title = "Result is OK";
// else if (r.Result == ButtonResult.Cancel)
// Title = "Result is Cancel";
// else
// Title = "I Don't know what you did!?";
//});
//_dialogService.ShowConfirmation(message, r =>
//{
// if (r.Result == ButtonResult.None)
// Title = "Result is None";
// else if (r.Result == ButtonResult.OK)
// Title = "Result is OK";
// else if (r.Result == ButtonResult.Cancel)
// Title = "Result is Cancel";
// else
// Title = "I Don't know what you did!?";
//});
_dialogService.ShowNotificationInAnotherWindow(message, r =>
{
if (r.Result == ButtonResult.None)
Title = "Result is None";
else if (r.Result == ButtonResult.OK)
Title = "Result is OK";
else if (r.Result == ButtonResult.Cancel)
Title = "Result is Cancel";
else
Title = "I Don't know what you did!?";
});
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld/Views/MainWindow.xaml
================================================
================================================
FILE: e2e/Wpf/HelloWorld/Views/MainWindow.xaml.cs
================================================
using System.Windows;
namespace HelloWorld.Views
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld.Bootstraper/App.xaml
================================================
================================================
FILE: e2e/Wpf/HelloWorld.Bootstraper/App.xaml.cs
================================================
using System.Windows;
namespace HelloWorld
{
///
/// Interaction logic for App.xaml
///
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var bs = new Bootstrapper();
bs.Run();
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld.Bootstraper/Bootstrapper.cs
================================================
using HelloWorld.Modules.ModuleA;
using HelloWorld.Views;
using Prism.Ioc;
using Prism.Modularity;
using Prism.Unity;
using System.Windows;
using Unity;
namespace HelloWorld
{
class Bootstrapper : PrismBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterSharedSamples();
}
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
base.ConfigureModuleCatalog(moduleCatalog);
moduleCatalog.AddModule();
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld.Bootstraper/HelloWorld.Bootstrapper.csproj
================================================
WinExenet10.0-windows;net462trueHelloWorld..\HelloWorld\prism-sandbox.ico..\HelloWorld\bin\**;..\HelloWorld\obj\**;..\HelloWorld\App.*
================================================
FILE: e2e/Wpf/HelloWorld.Core/DialogServiceExtensions.cs
================================================
using Prism.Dialogs;
using System;
namespace HelloWorld.Core
{
public static class DialogServiceExtensions
{
public static void ShowNotification(this IDialogService dialogService, string message, Action callBack)
{
dialogService.Show("NotificationDialog", new DialogParameters($"message={message}"), callBack);
}
public static void ShowNotificationInAnotherWindow(this IDialogService dialogService, string message, Action callBack)
{
dialogService.Show("NotificationDialog", new DialogParameters($"message={message}"), callBack, "AnotherDialogWindow");
}
public static void ShowConfirmation(this IDialogService dialogService, string message, Action callBack)
{
dialogService.ShowDialog("ConfirmationDialog", new DialogParameters($"message={message}"), callBack);
}
public static void ShowConfirmationInAnotherWindow(this IDialogService dialogService, string message, Action callBack)
{
dialogService.ShowDialog("ConfirmationDialog", new DialogParameters($"message={message}"), callBack, "AnotherDialogWindow");
}
}
}
================================================
FILE: e2e/Wpf/HelloWorld.Core/HelloWorld.Core.csproj
================================================
net10.0-windows;net462true
================================================
FILE: e2e/Wpf/HelloWorld.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.12.35707.178 d17.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HelloWorld", "HelloWorld\HelloWorld.csproj", "{B03C14CC-8DE9-40EE-9562-12B976E4CEE8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Core", "..\..\src\Prism.Core\Prism.Core.csproj", "{457AA668-72BB-4701-9A4E-FA86B0C412DE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Prism Library", "Prism Library", "{15CF1FE1-D78E-4E3D-A9F8-FA0FCC56A83A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Wpf", "..\..\src\Wpf\Prism.Wpf\Prism.Wpf.csproj", "{AA8ED3D6-A708-4187-8FAC-00F56E063AD7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.DryIoc.Wpf", "..\..\src\Wpf\Prism.DryIoc.Wpf\Prism.DryIoc.Wpf.csproj", "{A0842858-BFD5-41AE-BDE7-CBD870BC9900}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prism.Unity.Wpf", "..\..\src\Wpf\Prism.Unity.Wpf\Prism.Unity.Wpf.csproj", "{DEBADAAB-5C78-444E-AA77-336A43B49EC3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld.Bootstrapper", "HelloWorld.Bootstraper\HelloWorld.Bootstrapper.csproj", "{36C11381-D25A-4E40-956F-05E9C440FA86}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld.Modules.ModuleA", "Modules\HelloWorld.Modules.ModuleA\HelloWorld.Modules.ModuleA.csproj", "{D16AADD5-6EAA-446A-83F5-9DFC36DD4108}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HelloWorld.Core", "HelloWorld.Core\HelloWorld.Core.csproj", "{F9541A8C-42DD-4340-AB57-54C7AAAC1BCC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{63541838-3D6A-4F2E-92EF-AC4953BB9B9B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prism.Events", "..\..\src\Prism.Events\Prism.Events.csproj", "{E35BF062-652E-4520-8DD8-55DC80012D57}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B03C14CC-8DE9-40EE-9562-12B976E4CEE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B03C14CC-8DE9-40EE-9562-12B976E4CEE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B03C14CC-8DE9-40EE-9562-12B976E4CEE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B03C14CC-8DE9-40EE-9562-12B976E4CEE8}.Release|Any CPU.Build.0 = Release|Any CPU
{457AA668-72BB-4701-9A4E-FA86B0C412DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{457AA668-72BB-4701-9A4E-FA86B0C412DE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{457AA668-72BB-4701-9A4E-FA86B0C412DE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{457AA668-72BB-4701-9A4E-FA86B0C412DE}.Release|Any CPU.Build.0 = Release|Any CPU
{AA8ED3D6-A708-4187-8FAC-00F56E063AD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA8ED3D6-A708-4187-8FAC-00F56E063AD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AA8ED3D6-A708-4187-8FAC-00F56E063AD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA8ED3D6-A708-4187-8FAC-00F56E063AD7}.Release|Any CPU.Build.0 = Release|Any CPU
{A0842858-BFD5-41AE-BDE7-CBD870BC9900}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A0842858-BFD5-41AE-BDE7-CBD870BC9900}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A0842858-BFD5-41AE-BDE7-CBD870BC9900}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A0842858-BFD5-41AE-BDE7-CBD870BC9900}.Release|Any CPU.Build.0 = Release|Any CPU
{DEBADAAB-5C78-444E-AA77-336A43B49EC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DEBADAAB-5C78-444E-AA77-336A43B49EC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DEBADAAB-5C78-444E-AA77-336A43B49EC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DEBADAAB-5C78-444E-AA77-336A43B49EC3}.Release|Any CPU.Build.0 = Release|Any CPU
{36C11381-D25A-4E40-956F-05E9C440FA86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{36C11381-D25A-4E40-956F-05E9C440FA86}.Debug|Any CPU.Build.0 = Debug|Any CPU
{36C11381-D25A-4E40-956F-05E9C440FA86}.Release|Any CPU.ActiveCfg = Release|Any CPU
{36C11381-D25A-4E40-956F-05E9C440FA86}.Release|Any CPU.Build.0 = Release|Any CPU
{D16AADD5-6EAA-446A-83F5-9DFC36DD4108}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D16AADD5-6EAA-446A-83F5-9DFC36DD4108}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D16AADD5-6EAA-446A-83F5-9DFC36DD4108}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D16AADD5-6EAA-446A-83F5-9DFC36DD4108}.Release|Any CPU.Build.0 = Release|Any CPU
{F9541A8C-42DD-4340-AB57-54C7AAAC1BCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F9541A8C-42DD-4340-AB57-54C7AAAC1BCC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F9541A8C-42DD-4340-AB57-54C7AAAC1BCC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F9541A8C-42DD-4340-AB57-54C7AAAC1BCC}.Release|Any CPU.Build.0 = Release|Any CPU
{E35BF062-652E-4520-8DD8-55DC80012D57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E35BF062-652E-4520-8DD8-55DC80012D57}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E35BF062-652E-4520-8DD8-55DC80012D57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E35BF062-652E-4520-8DD8-55DC80012D57}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{457AA668-72BB-4701-9A4E-FA86B0C412DE} = {15CF1FE1-D78E-4E3D-A9F8-FA0FCC56A83A}
{AA8ED3D6-A708-4187-8FAC-00F56E063AD7} = {15CF1FE1-D78E-4E3D-A9F8-FA0FCC56A83A}
{A0842858-BFD5-41AE-BDE7-CBD870BC9900} = {15CF1FE1-D78E-4E3D-A9F8-FA0FCC56A83A}
{DEBADAAB-5C78-444E-AA77-336A43B49EC3} = {15CF1FE1-D78E-4E3D-A9F8-FA0FCC56A83A}
{D16AADD5-6EAA-446A-83F5-9DFC36DD4108} = {63541838-3D6A-4F2E-92EF-AC4953BB9B9B}
{E35BF062-652E-4520-8DD8-55DC80012D57} = {15CF1FE1-D78E-4E3D-A9F8-FA0FCC56A83A}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D877B086-37FD-4AA5-8AB3-CF7E87E27425}
EndGlobalSection
GlobalSection(SharedMSBuildProjectFiles) = preSolution
..\..\src\Containers\Prism.DryIoc.Shared\Prism.DryIoc.Shared.projitems*{a0842858-bfd5-41ae-bde7-cbd870bc9900}*SharedItemsImports = 5
..\..\src\Containers\Prism.Unity.Shared\Prism.Unity.Shared.projitems*{debadaab-5c78-444e-aa77-336a43b49ec3}*SharedItemsImports = 5
EndGlobalSection
EndGlobal
================================================
FILE: e2e/Wpf/Modules/HelloWorld.Modules.ModuleA/HelloWorld.Modules.ModuleA.csproj
================================================
net10.0-windows;net462true
================================================
FILE: e2e/Wpf/Modules/HelloWorld.Modules.ModuleA/ModuleAModule.cs
================================================
using HelloWorld.Modules.ModuleA.Views;
using Prism.Ioc;
using Prism.Modularity;
namespace HelloWorld.Modules.ModuleA
{
public class ModuleAModule : IModule
{
public void OnInitialized(IContainerProvider containerProvider)
{
}
public void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation();
}
}
}
================================================
FILE: e2e/Wpf/Modules/HelloWorld.Modules.ModuleA/ViewModels/ViewAViewModel.cs
================================================
using Prism.Commands;
using Prism.Mvvm;
using Prism.Dialogs;
using HelloWorld.Core;
namespace HelloWorld.Modules.ModuleA.ViewModels
{
public class ViewAViewModel : BindableBase
{
private string _message;
public string Message
{
get { return _message; }
set { SetProperty(ref _message, value); }
}
private DelegateCommand _showDialogCommand;
private readonly IDialogService _dialogService;
public DelegateCommand ShowDialogCommand =>
_showDialogCommand ?? (_showDialogCommand = new DelegateCommand(ExecuteShowDialogCommand));
void ExecuteShowDialogCommand()
{
_dialogService.ShowNotification("Hello There!", r =>
{
if (r.Result == ButtonResult.OK)
Message = "OK was clicked";
else
Message = "Something else was clicked";
});
}
public ViewAViewModel(IDialogService dialogService)
{
Message = "Hello from ViewA in Module A";
_dialogService = dialogService;
}
}
}
================================================
FILE: e2e/Wpf/Modules/HelloWorld.Modules.ModuleA/Views/ViewA.xaml
================================================
================================================
FILE: e2e/Wpf/Modules/HelloWorld.Modules.ModuleA/Views/ViewA.xaml.cs
================================================
using System.Windows.Controls;
namespace HelloWorld.Modules.ModuleA.Views
{
///
/// Interaction logic for ViewA
///
public partial class ViewA : UserControl
{
public ViewA()
{
InitializeComponent();
}
}
}
================================================
FILE: global.json
================================================
{
"msbuild-sdks": {
"Microsoft.Build.NoTargets": "3.7.56",
"MSBuild.Sdk.Extras": "3.0.44",
"Uno.Sdk": "6.4.20"
}
}
================================================
FILE: src/Avalonia/Prism.Avalonia/Common/ObservableObject.cs
================================================
using System.ComponentModel;
using Prism.Extensions;
using Avalonia;
using Avalonia.Controls;
namespace Prism.Common
{
///
/// Class that wraps an object, so that other classes can notify for Change events. Typically, this class is set as
/// a Dependency Property on AvaloniaObjects, and allows other classes to observe any changes in the Value.
///
///
/// This class is required, because in Silverlight, it's not possible to receive Change notifications for Dependency properties that you do not own.
///
/// The type of the property that's wrapped in the Observable object
public class ObservableObject : Control, INotifyPropertyChanged
{
///
/// Identifies the Value property of the ObservableObject
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1000:DoNotDeclareStaticMembersOnGenericTypes", Justification = "This is the pattern for dependency properties")]
public static readonly StyledProperty ValueProperty =
AvaloniaProperty.Register(name: nameof(Value));
///
/// Event that gets invoked when the Value property changes.
///
public event PropertyChangedEventHandler PropertyChanged;
///
/// The value that's wrapped inside the ObservableObject.
///
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")]
public T Value
{
get => (T)GetValue(ValueProperty);
set => SetValue(ValueProperty, value);
}
private static void ValueChangedCallback(AvaloniaObject d, AvaloniaPropertyChangedEventArgs e)
{
ObservableObject thisInstance = ((ObservableObject)d);
thisInstance.PropertyChanged?.Invoke(thisInstance, new PropertyChangedEventArgs(nameof(Value)));
}
static ObservableObject()
{
ValueProperty.Changed.Subscribe(args => ValueChangedCallback(args?.Sender, args));
}
}
}
================================================
FILE: src/Avalonia/Prism.Avalonia/Common/Stubs.cs
================================================
using System;
namespace Prism.Common
{
internal static class Stubs
{
public static readonly Action Nop = () => { };
public static readonly Action Throw = ex => { throw ex; };
}
}
================================================
FILE: src/Avalonia/Prism.Avalonia/Dialogs/Dialog.cs
================================================
using Avalonia;
using Avalonia.Controls;
using Avalonia.Styling;
using Prism.Extensions;
namespace Prism.Dialogs
{
/// This class contains attached properties.
public class Dialog
{
/// Identifies the WindowStyle attached property.
/// This attached property is used to specify the style of a .
public static readonly AvaloniaProperty WindowStyleProperty =
AvaloniaProperty.RegisterAttached("WindowStyle", typeof(Dialog));
/// Identifies the WindowStartupLocation attached property.
/// This attached property is used to specify the startup location of a .
public static readonly AvaloniaProperty WindowStartupLocationProperty =
AvaloniaProperty.RegisterAttached(
name: "WindowStartupLocation",
ownerType: typeof(Dialog));
/// Creates an instance of the Dialog class.
public Dialog()
{
WindowStartupLocationProperty.Changed.Subscribe(args => OnWindowStartupLocationChanged(args?.Sender, args));
}
///
/// Gets the value for the attached property.
///
/// The target element.
/// The attached to the element.
public static Style GetWindowStyle(AvaloniaObject obj)
{
return (Style)obj.GetValue(WindowStyleProperty);
}
///
/// Sets the attached property.
///
/// The target element.
/// The Style to attach.
public static void SetWindowStyle(AvaloniaObject obj, Style value)
{
obj.SetValue(WindowStyleProperty, value);
}
///
/// Gets the value for the attached property.
///
/// The target element.
/// The attached to the element.
public static WindowStartupLocation GetWindowStartupLocation(AvaloniaObject obj)
{
return (WindowStartupLocation)obj.GetValue(WindowStartupLocationProperty);
}
///
/// Sets the attached property.
///
/// The target element.
/// The WindowStartupLocation to attach.
public static void SetWindowStartupLocation(AvaloniaObject obj, WindowStartupLocation value)
{
obj.SetValue(WindowStartupLocationProperty, value);
}
private static void OnWindowStartupLocationChanged(AvaloniaObject sender, AvaloniaPropertyChangedEventArgs e)
{
if (sender is Window window)
window.WindowStartupLocation = (WindowStartupLocation)e.NewValue;
}
}
}
================================================
FILE: src/Avalonia/Prism.Avalonia/Dialogs/DialogService.cs
================================================
using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Prism.Common;
using Prism.Ioc;
namespace Prism.Dialogs
{
/// Implements to show modal and non-modal dialogs.
/// The dialog's ViewModel must implement IDialogAware.
public class DialogService : IDialogService
{
private readonly IContainerExtension _containerExtension;
/// Initializes a new instance of the class.
/// The
public DialogService(IContainerExtension containerExtension)
{
_containerExtension = containerExtension;
}
/// Show dialog.
/// Name of the dialog window to show.
/// .
/// The action to perform when the dialog is closed.
public void ShowDialog(string name, IDialogParameters parameters, DialogCallback callback)
{
parameters ??= new DialogParameters();
var isModal = parameters.TryGetValue(KnownDialogParameters.ShowNonModal, out var show) ? !show : true;
var windowName = parameters.TryGetValue(KnownDialogParameters.WindowName, out var wName) ? wName : null;
var owner = parameters.TryGetValue(KnownDialogParameters.ParentWindow, out var hWnd) ? hWnd : null;
IDialogWindow dialogWindow = CreateDialogWindow(windowName);
ConfigureDialogWindowEvents(dialogWindow, callback);
ConfigureDialogWindowContent(name, dialogWindow, parameters);
ShowDialogWindow(dialogWindow, isModal, owner);
}
/// Shows the dialog window.
/// The dialog window to show.
/// If true; dialog is shown as a modal
/// Optional host window of the dialog. Use-case, Dialog calling a dialog.
protected virtual void ShowDialogWindow(IDialogWindow dialogWindow, bool isModal, Window owner = null)
{
if (isModal &&
Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime deskLifetime)
{
// Ref:
// - https://docs.avaloniaui.net/docs/reference/controls/window#show-a-window-as-a-dialog
// - https://github.com/AvaloniaUI/Avalonia/discussions/7924
// (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktopLifetime)
if (owner != null)
dialogWindow.ShowDialog(owner);
else
dialogWindow.ShowDialog(deskLifetime.MainWindow);
}
else
{
dialogWindow.Show();
}
}
///
/// Create a new .
///
/// The name of the hosting window registered with the IContainerRegistry.
/// The created .
protected virtual IDialogWindow CreateDialogWindow(string name)
{
if (string.IsNullOrWhiteSpace(name))
return _containerExtension.Resolve();
else
return _containerExtension.Resolve(name);
}
///
/// Configure content.
///
/// The name of the dialog to show.
/// The hosting window.
/// The parameters to pass to the dialog.
protected virtual void ConfigureDialogWindowContent(string dialogName, IDialogWindow window, IDialogParameters parameters)
{
var content = _containerExtension.Resolve