diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index 083cc79e8..71f65c31e 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -6,7 +6,9 @@
"Bash(docfx docs/docfx.json)",
"mcp__microsoft_docs__microsoft_code_sample_search",
"mcp__context7__resolve-library-id",
- "mcp__context7__query-docs"
+ "mcp__context7__query-docs",
+ "WebFetch(domain:devblogs.microsoft.com)",
+ "Bash(dotnet build *)"
]
}
}
diff --git a/.editorconfig b/.editorconfig
index 833e151fa..1f3d43af8 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -21,13 +21,13 @@ insert_final_newline = false
#### Build files ####
# Solution files
-[*.{sln,slnx}]
+[*.{sln}]
tab_width = 4
indent_size = 4
indent_style = tab
# Configuration files
-[*.{json,xml,yml,config,runsettings}]
+[*.{json,xml,yml,config,runsettings,slnx}]
indent_size = 2
# MSBuild files
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 9af58d77e..593d10b8d 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -15,10 +15,6 @@ Central Package Management: Directory.Packages.props - NEVER add package version
Build library:
dotnet build src/Wpf.Ui/Wpf.Ui.csproj
-Solution filters:
-- Wpf.Ui.Library.slnf - Library projects only
-- Wpf.Ui.Gallery.slnf - Gallery demo app
-
Testing:
- XUnit v3 for unit tests (tests/Wpf.Ui.UnitTests/)
- AwesomeAssertions for assertions (FluentAssertions successor)
diff --git a/.github/workflows/wpf-ui-cd-extension.yaml b/.github/workflows/wpf-ui-cd-extension.yaml
index 8cfe5caa4..1f90b7585 100644
--- a/.github/workflows/wpf-ui-cd-extension.yaml
+++ b/.github/workflows/wpf-ui-cd-extension.yaml
@@ -2,9 +2,9 @@ name: wpf-ui-cd-extension
on:
push:
- branches: [main]
+ branches: [ main ]
paths:
- - 'src/Wpf.Ui.Extension**'
+ - "src/Wpf.Ui.Extension**"
workflow_dispatch:
@@ -26,13 +26,19 @@ jobs:
nuget-api-key: ${{ secrets.NUGET_API_KEY }}
- name: Restore dependencies
- run: nuget restore Wpf.Ui.sln
+ run: dotnet restore src\Wpf.Ui.Extension\Wpf.Ui.Extension.csproj
- name: Build the solution
- run: msbuild src\Wpf.Ui.Extension\Wpf.Ui.Extension.csproj /t:Rebuild -p:Configuration=Release -p:RestorePackages=false -p:Platform="x64" -p:ProductArchitecture="amd64" -p:GITHUB_ACTIONS=True -p:LangVersion=8.0
+ run: msbuild src\Wpf.Ui.Extension\Wpf.Ui.Extension.csproj /t:Rebuild
+ -p:Configuration=Release -p:RestorePackages=false
+ -p:Platform="x64" -p:ProductArchitecture="amd64"
+ -p:GITHUB_ACTIONS=True -p:LangVersion=8.0
- name: Build the solution
- run: msbuild src\Wpf.Ui.Extension\Wpf.Ui.Extension.csproj /t:Rebuild -p:Configuration=Release -p:RestorePackages=false -p:Platform="arm64" -p:ProductArchitecture="arm64" -p:GITHUB_ACTIONS=True -p:LangVersion=8.0
+ run: msbuild src\Wpf.Ui.Extension\Wpf.Ui.Extension.csproj /t:Rebuild
+ -p:Configuration=Release -p:RestorePackages=false -p:Platform="arm64"
+ -p:ProductArchitecture="arm64" -p:GITHUB_ACTIONS=True
+ -p:LangVersion=8.0
- uses: actions/upload-artifact@v4
with:
diff --git a/Directory.Build.props b/Directory.Build.props
index d37b05a15..a0a8d6b79 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -4,8 +4,8 @@
$(RepositoryDirectory)build\
- 4.2.1
- 4.2.0
+ 5.0.0-preview.1
+ 5.0.0
lepo.co
diff --git a/Directory.Packages.props b/Directory.Packages.props
index ae23b0048..074ca123e 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -36,6 +36,7 @@
+
diff --git a/Wpf.Ui.Gallery.slnf b/Wpf.Ui.Gallery.slnf
deleted file mode 100644
index e2bd4120d..000000000
--- a/Wpf.Ui.Gallery.slnf
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "solution": {
- "path": "Wpf.Ui.sln",
- "projects": [
- "src\\Wpf.Ui.Gallery.Package\\Wpf.Ui.Gallery.Package.wapproj",
- "src\\Wpf.Ui.Gallery\\Wpf.Ui.Gallery.csproj",
- "src\\Wpf.Ui.SyntaxHighlight\\Wpf.Ui.SyntaxHighlight.csproj",
- "src\\Wpf.Ui.ToastNotifications\\Wpf.Ui.ToastNotifications.csproj",
- "src\\Wpf.Ui.Tray\\Wpf.Ui.Tray.csproj",
- "src\\Wpf.Ui\\Wpf.Ui.csproj"
- ]
- }
-}
\ No newline at end of file
diff --git a/Wpf.Ui.Library.slnf b/Wpf.Ui.Library.slnf
deleted file mode 100644
index 11b2921d4..000000000
--- a/Wpf.Ui.Library.slnf
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "solution": {
- "path": "Wpf.Ui.sln",
- "projects": [
- "src\\Wpf.Ui.ToastNotifications\\Wpf.Ui.ToastNotifications.csproj",
- "src\\Wpf.Ui.Tray\\Wpf.Ui.Tray.csproj",
- "src\\Wpf.Ui\\Wpf.Ui.csproj"
- ]
- }
-}
\ No newline at end of file
diff --git a/Wpf.Ui.sln b/Wpf.Ui.sln
deleted file mode 100644
index e90969047..000000000
--- a/Wpf.Ui.sln
+++ /dev/null
@@ -1,408 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 18
-VisualStudioVersion = 18.0.11201.2 d18.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{21DB16AA-40BB-428B-AFE8-DEF4E3F0DC49}"
- ProjectSection(SolutionItems) = preProject
- .editorconfig = .editorconfig
- Directory.Build.props = Directory.Build.props
- Directory.Build.targets = Directory.Build.targets
- Directory.Packages.props = Directory.Packages.props
- LICENSE = LICENSE
- LICENSE.md = LICENSE.md
- nuget.config = nuget.config
- README.md = README.md
- Settings.XamlStyler = Settings.XamlStyler
- ThirdPartyNotices.txt = ThirdPartyNotices.txt
- EndProjectSection
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Gallery", "src\Wpf.Ui.Gallery\Wpf.Ui.Gallery.csproj", "{E55BFB14-9DA6-434A-8153-BFE124D71818}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui", "src\Wpf.Ui\Wpf.Ui.csproj", "{1ADC87D1-8963-4100-845A-18477824718E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.FontMapper", "src\Wpf.Ui.FontMapper\Wpf.Ui.FontMapper.csproj", "{50BAB8DE-6558-4E77-87E5-CD533CBBB72F}"
-EndProject
-Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "Wpf.Ui.Gallery.Package", "src\Wpf.Ui.Gallery.Package\Wpf.Ui.Gallery.Package.wapproj", "{50C713C3-555E-491F-87EE-C806BEC0579F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.UnitTests", "tests\Wpf.Ui.UnitTests\Wpf.Ui.UnitTests.csproj", "{AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{35AC6218-CBEA-4FDA-8CE1-D1EBD6FD8D4A}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Extension", "src\Wpf.Ui.Extension\Wpf.Ui.Extension.csproj", "{1298D974-9D81-4A93-9374-EA6A0E723DEB}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Extension.Template.Compact", "src\Wpf.Ui.Extension.Template.Compact\Wpf.Ui.Extension.Template.Compact.csproj", "{14D7431C-6CFF-4191-BB88-2B8D5F323A30}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Extension.Template.Blank", "src\Wpf.Ui.Extension.Template.Blank\Wpf.Ui.Extension.Template.Blank.csproj", "{AB3D44B5-9491-487E-A134-9AC5BED2B981}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Extension.Template.Fluent", "src\Wpf.Ui.Extension.Template.Fluent\Wpf.Ui.Extension.Template.Fluent.csproj", "{4D2706B5-27A9-4542-BD4D-8C22D12D0628}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.ToastNotifications", "src\Wpf.Ui.ToastNotifications\Wpf.Ui.ToastNotifications.csproj", "{3E84FE46-D3FD-4E8A-9208-95E315F16E1F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Tray", "src\Wpf.Ui.Tray\Wpf.Ui.Tray.csproj", "{073BF126-377B-49CD-838A-E8B779EB4862}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.SyntaxHighlight", "src\Wpf.Ui.SyntaxHighlight\Wpf.Ui.SyntaxHighlight.csproj", "{07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Abstractions", "src\Wpf.Ui.Abstractions\Wpf.Ui.Abstractions.csproj", "{F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D7EA6A65-3CB5-4A59-934A-B8402C849107}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Demo.Console", "samples\Wpf.Ui.Demo.Console\Wpf.Ui.Demo.Console.csproj", "{6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Demo.Mvvm", "samples\Wpf.Ui.Demo.Mvvm\Wpf.Ui.Demo.Mvvm.csproj", "{5138077E-670E-413D-94D1-0825B6D1201B}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Demo.Simple", "samples\Wpf.Ui.Demo.Simple\Wpf.Ui.Demo.Simple.csproj", "{E37CD05A-EBFC-429D-A550-BEE44119FA9E}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Demo.Dialogs", "samples\Wpf.Ui.Demo.Dialogs\Wpf.Ui.Demo.Dialogs.csproj", "{7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.DependencyInjection", "src\Wpf.Ui.DependencyInjection\Wpf.Ui.DependencyInjection.csproj", "{9C8D6133-9417-43A1-B54F-725009569D71}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Demo.SetResources.Simple", "samples\Wpf.Ui.Demo.SetResources.Simple\Wpf.Ui.Demo.SetResources.Simple.csproj", "{3B424CF4-09F8-47D3-8420-53D7A1165B9C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Gallery.IntegrationTests", "tests\Wpf.Ui.Gallery.IntegrationTests\Wpf.Ui.Gallery.IntegrationTests.csproj", "{A396F1D6-55CF-493E-B541-A50B8F29395A}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.FlaUI", "src\Wpf.Ui.FlaUI\Wpf.Ui.FlaUI.csproj", "{3E29F5F8-8310-45F4-A648-8F44F32B6472}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|arm64 = Debug|arm64
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|arm64 = Release|arm64
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|arm64.ActiveCfg = Debug|arm64
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|arm64.Build.0 = Debug|arm64
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|x64.ActiveCfg = Debug|x64
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|x64.Build.0 = Debug|x64
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|x86.ActiveCfg = Debug|x86
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|x86.Build.0 = Debug|x86
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|Any CPU.Build.0 = Release|Any CPU
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|arm64.ActiveCfg = Release|arm64
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|arm64.Build.0 = Release|arm64
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|x64.ActiveCfg = Release|x64
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|x64.Build.0 = Release|x64
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|x86.ActiveCfg = Release|x86
- {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|x86.Build.0 = Release|x86
- {1ADC87D1-8963-4100-845A-18477824718E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Debug|arm64.Build.0 = Debug|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Debug|x64.ActiveCfg = Debug|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Debug|x64.Build.0 = Debug|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Debug|x86.ActiveCfg = Debug|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Debug|x86.Build.0 = Debug|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Release|Any CPU.Build.0 = Release|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Release|arm64.ActiveCfg = Release|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Release|arm64.Build.0 = Release|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Release|x64.ActiveCfg = Release|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Release|x64.Build.0 = Release|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Release|x86.ActiveCfg = Release|Any CPU
- {1ADC87D1-8963-4100-845A-18477824718E}.Release|x86.Build.0 = Release|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|arm64.Build.0 = Debug|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|x64.ActiveCfg = Debug|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|x64.Build.0 = Debug|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|x86.ActiveCfg = Debug|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|x86.Build.0 = Debug|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|Any CPU.Build.0 = Release|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|arm64.ActiveCfg = Release|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|arm64.Build.0 = Release|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|x64.ActiveCfg = Release|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|x64.Build.0 = Release|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|x86.ActiveCfg = Release|Any CPU
- {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|x86.Build.0 = Release|Any CPU
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Debug|arm64.ActiveCfg = Debug|ARM64
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Debug|x64.ActiveCfg = Debug|x64
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Debug|x86.ActiveCfg = Debug|x86
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|arm64.ActiveCfg = Release|ARM64
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|arm64.Build.0 = Release|ARM64
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|arm64.Deploy.0 = Release|ARM64
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x64.ActiveCfg = Release|x64
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x64.Build.0 = Release|x64
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x64.Deploy.0 = Release|x64
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x86.ActiveCfg = Release|x86
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x86.Build.0 = Release|x86
- {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x86.Deploy.0 = Release|x86
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|arm64.Build.0 = Debug|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|x64.ActiveCfg = Debug|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|x64.Build.0 = Debug|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|x86.ActiveCfg = Debug|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|x86.Build.0 = Debug|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|Any CPU.Build.0 = Release|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|arm64.ActiveCfg = Release|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|arm64.Build.0 = Release|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|x64.ActiveCfg = Release|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|x64.Build.0 = Release|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|x86.ActiveCfg = Release|Any CPU
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|x86.Build.0 = Release|Any CPU
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Debug|arm64.ActiveCfg = Debug|arm64
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Debug|x64.ActiveCfg = Debug|x64
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Debug|x86.ActiveCfg = Debug|x86
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|Any CPU.Build.0 = Release|Any CPU
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|arm64.ActiveCfg = Release|arm64
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|arm64.Build.0 = Release|arm64
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|x64.ActiveCfg = Release|x64
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|x64.Build.0 = Release|x64
- {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|x86.ActiveCfg = Release|x86
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Debug|arm64.ActiveCfg = Debug|arm64
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Debug|x64.ActiveCfg = Debug|x64
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Debug|x86.ActiveCfg = Debug|x86
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|Any CPU.Build.0 = Release|Any CPU
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|arm64.ActiveCfg = Release|arm64
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|arm64.Build.0 = Release|arm64
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|x64.ActiveCfg = Release|x64
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|x64.Build.0 = Release|x64
- {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|x86.ActiveCfg = Release|x86
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Debug|arm64.ActiveCfg = Debug|arm64
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Debug|x64.ActiveCfg = Debug|x64
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Debug|x86.ActiveCfg = Debug|x86
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|Any CPU.Build.0 = Release|Any CPU
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|arm64.ActiveCfg = Release|arm64
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|arm64.Build.0 = Release|arm64
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|x64.ActiveCfg = Release|x64
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|x64.Build.0 = Release|x64
- {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|x86.ActiveCfg = Release|x86
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Debug|arm64.ActiveCfg = Debug|arm64
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Debug|x64.ActiveCfg = Debug|x64
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Debug|x86.ActiveCfg = Debug|x86
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|Any CPU.Build.0 = Release|Any CPU
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|arm64.ActiveCfg = Release|arm64
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|arm64.Build.0 = Release|arm64
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|x64.ActiveCfg = Release|x64
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|x64.Build.0 = Release|x64
- {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|x86.ActiveCfg = Release|x86
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|arm64.Build.0 = Debug|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|x64.ActiveCfg = Debug|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|x64.Build.0 = Debug|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|x86.ActiveCfg = Debug|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|x86.Build.0 = Debug|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|Any CPU.Build.0 = Release|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|arm64.ActiveCfg = Release|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|arm64.Build.0 = Release|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|x64.ActiveCfg = Release|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|x64.Build.0 = Release|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|x86.ActiveCfg = Release|Any CPU
- {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|x86.Build.0 = Release|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|arm64.Build.0 = Debug|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|x64.ActiveCfg = Debug|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|x64.Build.0 = Debug|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|x86.ActiveCfg = Debug|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|x86.Build.0 = Debug|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Release|Any CPU.Build.0 = Release|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Release|arm64.ActiveCfg = Release|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Release|arm64.Build.0 = Release|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Release|x64.ActiveCfg = Release|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Release|x64.Build.0 = Release|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Release|x86.ActiveCfg = Release|Any CPU
- {073BF126-377B-49CD-838A-E8B779EB4862}.Release|x86.Build.0 = Release|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|arm64.Build.0 = Debug|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|x64.ActiveCfg = Debug|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|x64.Build.0 = Debug|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|x86.ActiveCfg = Debug|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|x86.Build.0 = Debug|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|Any CPU.Build.0 = Release|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|arm64.ActiveCfg = Release|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|arm64.Build.0 = Release|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|x64.ActiveCfg = Release|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|x64.Build.0 = Release|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|x86.ActiveCfg = Release|Any CPU
- {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|x86.Build.0 = Release|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|arm64.Build.0 = Debug|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|x64.ActiveCfg = Debug|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|x64.Build.0 = Debug|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|x86.ActiveCfg = Debug|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|x86.Build.0 = Debug|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|Any CPU.Build.0 = Release|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|arm64.ActiveCfg = Release|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|arm64.Build.0 = Release|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|x64.ActiveCfg = Release|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|x64.Build.0 = Release|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|x86.ActiveCfg = Release|Any CPU
- {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|x86.Build.0 = Release|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|arm64.Build.0 = Debug|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|x64.ActiveCfg = Debug|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|x64.Build.0 = Debug|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|x86.ActiveCfg = Debug|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|x86.Build.0 = Debug|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|Any CPU.Build.0 = Release|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|arm64.ActiveCfg = Release|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|arm64.Build.0 = Release|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|x64.ActiveCfg = Release|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|x64.Build.0 = Release|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|x86.ActiveCfg = Release|Any CPU
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|x86.Build.0 = Release|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|arm64.Build.0 = Debug|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|x64.ActiveCfg = Debug|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|x64.Build.0 = Debug|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|x86.ActiveCfg = Debug|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|x86.Build.0 = Debug|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Release|Any CPU.Build.0 = Release|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Release|arm64.ActiveCfg = Release|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Release|arm64.Build.0 = Release|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Release|x64.ActiveCfg = Release|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Release|x64.Build.0 = Release|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Release|x86.ActiveCfg = Release|Any CPU
- {5138077E-670E-413D-94D1-0825B6D1201B}.Release|x86.Build.0 = Release|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|arm64.Build.0 = Debug|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|x64.ActiveCfg = Debug|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|x64.Build.0 = Debug|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|x86.ActiveCfg = Debug|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|x86.Build.0 = Debug|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|Any CPU.Build.0 = Release|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|arm64.ActiveCfg = Release|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|arm64.Build.0 = Release|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|x64.ActiveCfg = Release|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|x64.Build.0 = Release|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|x86.ActiveCfg = Release|Any CPU
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|x86.Build.0 = Release|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|arm64.Build.0 = Debug|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|x64.ActiveCfg = Debug|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|x64.Build.0 = Debug|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|x86.ActiveCfg = Debug|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|x86.Build.0 = Debug|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|Any CPU.Build.0 = Release|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|arm64.ActiveCfg = Release|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|arm64.Build.0 = Release|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|x64.ActiveCfg = Release|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|x64.Build.0 = Release|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|x86.ActiveCfg = Release|Any CPU
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|x86.Build.0 = Release|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|arm64.Build.0 = Debug|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|x64.ActiveCfg = Debug|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|x64.Build.0 = Debug|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|x86.ActiveCfg = Debug|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|x86.Build.0 = Debug|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Release|Any CPU.Build.0 = Release|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Release|arm64.ActiveCfg = Release|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Release|arm64.Build.0 = Release|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Release|x64.ActiveCfg = Release|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Release|x64.Build.0 = Release|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Release|x86.ActiveCfg = Release|Any CPU
- {9C8D6133-9417-43A1-B54F-725009569D71}.Release|x86.Build.0 = Release|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|arm64.Build.0 = Debug|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|x64.ActiveCfg = Debug|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|x64.Build.0 = Debug|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|x86.ActiveCfg = Debug|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|x86.Build.0 = Debug|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|Any CPU.Build.0 = Release|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|arm64.ActiveCfg = Release|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|arm64.Build.0 = Release|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|x64.ActiveCfg = Release|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|x64.Build.0 = Release|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|x86.ActiveCfg = Release|Any CPU
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|x86.Build.0 = Release|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|arm64.Build.0 = Debug|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|x64.ActiveCfg = Debug|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|x64.Build.0 = Debug|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|x86.ActiveCfg = Debug|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|x86.Build.0 = Debug|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|Any CPU.Build.0 = Release|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|arm64.ActiveCfg = Release|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|arm64.Build.0 = Release|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|x64.ActiveCfg = Release|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|x64.Build.0 = Release|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|x86.ActiveCfg = Release|Any CPU
- {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|x86.Build.0 = Release|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|arm64.ActiveCfg = Debug|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|arm64.Build.0 = Debug|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|x64.ActiveCfg = Debug|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|x64.Build.0 = Debug|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|x86.ActiveCfg = Debug|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|x86.Build.0 = Debug|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|Any CPU.Build.0 = Release|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|arm64.ActiveCfg = Release|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|arm64.Build.0 = Release|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|x64.ActiveCfg = Release|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|x64.Build.0 = Release|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|x86.ActiveCfg = Release|Any CPU
- {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|x86.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C} = {35AC6218-CBEA-4FDA-8CE1-D1EBD6FD8D4A}
- {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA} = {D7EA6A65-3CB5-4A59-934A-B8402C849107}
- {5138077E-670E-413D-94D1-0825B6D1201B} = {D7EA6A65-3CB5-4A59-934A-B8402C849107}
- {E37CD05A-EBFC-429D-A550-BEE44119FA9E} = {D7EA6A65-3CB5-4A59-934A-B8402C849107}
- {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4} = {D7EA6A65-3CB5-4A59-934A-B8402C849107}
- {3B424CF4-09F8-47D3-8420-53D7A1165B9C} = {D7EA6A65-3CB5-4A59-934A-B8402C849107}
- {A396F1D6-55CF-493E-B541-A50B8F29395A} = {35AC6218-CBEA-4FDA-8CE1-D1EBD6FD8D4A}
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {234CB3F9-5ADC-433F-BDBD-CB8EA59EB518}
- EndGlobalSection
-EndGlobal
diff --git a/Wpf.Ui.sln.DotSettings b/Wpf.Ui.sln.DotSettings
new file mode 100644
index 000000000..5541e3cbd
--- /dev/null
+++ b/Wpf.Ui.sln.DotSettings
@@ -0,0 +1,3 @@
+
+ True
+ True
\ No newline at end of file
diff --git a/Wpf.Ui.slnx b/Wpf.Ui.slnx
new file mode 100644
index 000000000..afac253d6
--- /dev/null
+++ b/Wpf.Ui.slnx
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build.ps1 b/build.ps1
index de2b25257..9a203e2f7 100644
--- a/build.ps1
+++ b/build.ps1
@@ -29,7 +29,7 @@ if ($dotnetVersion -eq $null) {
}
if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64") {
- dotnet restore Wpf.Ui.sln /tl
+ dotnet restore Wpf.Ui.slnx /tl
dotnet build src\Wpf.Ui.Gallery\Wpf.Ui.Gallery.csproj --configuration Release --no-restore --verbosity quiet /tl
} else {
Write-Host "Not in the x64 desktop environment."
diff --git a/docs/index.md b/docs/index.md
index ce4808e75..05ea26e2b 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -115,7 +115,7 @@ To ensure you receive the expert guidance you need, we offer a variety of suppor
Sponsor WPF UI on GitHub
-
+


diff --git a/samples/Wpf.Ui.Demo.Dialogs/MainWindow.xaml.cs b/samples/Wpf.Ui.Demo.Dialogs/MainWindow.xaml.cs
index 19ae1288a..9ecbf560f 100644
--- a/samples/Wpf.Ui.Demo.Dialogs/MainWindow.xaml.cs
+++ b/samples/Wpf.Ui.Demo.Dialogs/MainWindow.xaml.cs
@@ -24,10 +24,10 @@ private async void OnShowDialogClick(object sender, RoutedEventArgs e)
await Application.Current.Dispatcher.InvokeAsync(ShowSampleDialogAsync);
}
- private async Task ShowSampleDialogAsync()
+ private Task ShowSampleDialogAsync()
{
// Defining dialog object
- ContentDialog myDialog = new()
+ var myDialog = new ContentDialog
{
Title = "My sample dialog",
Content = "Content of the dialog",
@@ -40,6 +40,6 @@ private async Task ShowSampleDialogAsync()
myDialog.DialogHost = ContentPresenterForDialogs;
// Showing the dialog
- await myDialog.ShowAsync(CancellationToken.None);
+ return myDialog.ShowAsync(CancellationToken.None);
}
}
diff --git a/samples/Wpf.Ui.Demo.Mvvm/ViewModels/DataViewModel.cs b/samples/Wpf.Ui.Demo.Mvvm/ViewModels/DataViewModel.cs
index 8c941576f..7552762fd 100644
--- a/samples/Wpf.Ui.Demo.Mvvm/ViewModels/DataViewModel.cs
+++ b/samples/Wpf.Ui.Demo.Mvvm/ViewModels/DataViewModel.cs
@@ -15,7 +15,7 @@ public partial class DataViewModel : ViewModel
[ObservableProperty]
private List _colors = [];
- public override void OnNavigatedTo()
+ public override void OnNavigatedTo(CancellationToken cancellationToken = default)
{
if (!_isInitialized)
{
diff --git a/samples/Wpf.Ui.Demo.Mvvm/ViewModels/SettingsViewModel.cs b/samples/Wpf.Ui.Demo.Mvvm/ViewModels/SettingsViewModel.cs
index 5b6faa818..dac45d4af 100644
--- a/samples/Wpf.Ui.Demo.Mvvm/ViewModels/SettingsViewModel.cs
+++ b/samples/Wpf.Ui.Demo.Mvvm/ViewModels/SettingsViewModel.cs
@@ -18,7 +18,7 @@ public partial class SettingsViewModel : ViewModel
.ApplicationTheme
.Unknown;
- public override void OnNavigatedTo()
+ public override void OnNavigatedTo(CancellationToken cancellationToken = default)
{
if (!_isInitialized)
{
diff --git a/samples/Wpf.Ui.Demo.Mvvm/ViewModels/ViewModel.cs b/samples/Wpf.Ui.Demo.Mvvm/ViewModels/ViewModel.cs
index b96b71e2f..6e8c8aeec 100644
--- a/samples/Wpf.Ui.Demo.Mvvm/ViewModels/ViewModel.cs
+++ b/samples/Wpf.Ui.Demo.Mvvm/ViewModels/ViewModel.cs
@@ -10,30 +10,30 @@ namespace Wpf.Ui.Demo.Mvvm.ViewModels;
public abstract class ViewModel : ObservableObject, INavigationAware
{
///
- public virtual Task OnNavigatedToAsync()
+ public virtual ValueTask OnNavigatedToAsync(CancellationToken cancellationToken = default)
{
- OnNavigatedTo();
+ OnNavigatedTo(cancellationToken);
- return Task.CompletedTask;
+ return default;
}
///
/// Handles the event that is fired after the component is navigated to.
///
// ReSharper disable once MemberCanBeProtected.Global
- public virtual void OnNavigatedTo() { }
+ public virtual void OnNavigatedTo(CancellationToken cancellationToken = default) { }
///
- public virtual Task OnNavigatedFromAsync()
+ public virtual ValueTask OnNavigatedFromAsync(CancellationToken cancellationToken = default)
{
- OnNavigatedFrom();
+ OnNavigatedFrom(cancellationToken);
- return Task.CompletedTask;
+ return default;
}
///
/// Handles the event that is fired before the component is navigated from.
///
// ReSharper disable once MemberCanBeProtected.Global
- public virtual void OnNavigatedFrom() { }
+ public virtual void OnNavigatedFrom(CancellationToken cancellationToken = default) { }
}
diff --git a/samples/Wpf.Ui.Demo.Mvvm/Views/MainWindow.xaml b/samples/Wpf.Ui.Demo.Mvvm/Views/MainWindow.xaml
index d9a83cf53..93f061f22 100644
--- a/samples/Wpf.Ui.Demo.Mvvm/Views/MainWindow.xaml
+++ b/samples/Wpf.Ui.Demo.Mvvm/Views/MainWindow.xaml
@@ -38,6 +38,8 @@
diff --git a/samples/Wpf.Ui.Demo.Simple/MainWindow.xaml b/samples/Wpf.Ui.Demo.Simple/MainWindow.xaml
index ba09c4e6e..4c4cbef40 100644
--- a/samples/Wpf.Ui.Demo.Simple/MainWindow.xaml
+++ b/samples/Wpf.Ui.Demo.Simple/MainWindow.xaml
@@ -34,7 +34,10 @@
-
+
diff --git a/src/Wpf.Ui.Abstractions/Controls/INavigationAware.cs b/src/Wpf.Ui.Abstractions/Controls/INavigationAware.cs
index 8f9a087cb..81d520712 100644
--- a/src/Wpf.Ui.Abstractions/Controls/INavigationAware.cs
+++ b/src/Wpf.Ui.Abstractions/Controls/INavigationAware.cs
@@ -3,6 +3,8 @@
// Copyright (C) Leszek Pomianowski and WPF UI Contributors.
// All Rights Reserved.
+using System.Threading;
+
namespace Wpf.Ui.Abstractions.Controls;
///
@@ -14,11 +16,11 @@ public interface INavigationAware
/// Asynchronously handles the event that is fired after the component is navigated to.
///
/// A task that represents the asynchronous operation.
- Task OnNavigatedToAsync();
+ ValueTask OnNavigatedToAsync(CancellationToken cancellationToken = default);
///
/// Asynchronously handles the event that is fired before the component is navigated from.
///
/// A task that represents the asynchronous operation.
- Task OnNavigatedFromAsync();
+ ValueTask OnNavigatedFromAsync(CancellationToken cancellationToken = default);
}
diff --git a/src/Wpf.Ui.Abstractions/Controls/NavigationAware.cs b/src/Wpf.Ui.Abstractions/Controls/NavigationAware.cs
index 2c371d80f..66fa2b61c 100644
--- a/src/Wpf.Ui.Abstractions/Controls/NavigationAware.cs
+++ b/src/Wpf.Ui.Abstractions/Controls/NavigationAware.cs
@@ -3,6 +3,8 @@
// Copyright (C) Leszek Pomianowski and WPF UI Contributors.
// All Rights Reserved.
+using System.Threading;
+
namespace Wpf.Ui.Abstractions.Controls;
///
@@ -11,30 +13,40 @@ namespace Wpf.Ui.Abstractions.Controls;
public abstract class NavigationAware : INavigationAware
{
///
- public virtual Task OnNavigatedToAsync()
+ public virtual ValueTask OnNavigatedToAsync(CancellationToken cancellationToken = default)
{
- OnNavigatedTo();
+ if (cancellationToken.IsCancellationRequested)
+ {
+ return default;
+ }
+
+ OnNavigatedTo(cancellationToken);
- return Task.CompletedTask;
+ return default;
}
///
/// Handles the event that is fired after the component is navigated to.
///
// ReSharper disable once MemberCanBeProtected.Global
- public virtual void OnNavigatedTo() { }
+ public virtual void OnNavigatedTo(CancellationToken cancellationToken = default) { }
///
- public virtual Task OnNavigatedFromAsync()
+ public virtual ValueTask OnNavigatedFromAsync(CancellationToken cancellationToken = default)
{
- OnNavigatedFrom();
+ if (cancellationToken.IsCancellationRequested)
+ {
+ return default;
+ }
+
+ OnNavigatedFrom(cancellationToken);
- return Task.CompletedTask;
+ return default;
}
///
/// Handles the event that is fired before the component is navigated from.
///
// ReSharper disable once MemberCanBeProtected.Global
- public virtual void OnNavigatedFrom() { }
+ public virtual void OnNavigatedFrom(CancellationToken cancellationToken = default) { }
}
diff --git a/src/Wpf.Ui.Abstractions/Wpf.Ui.Abstractions.csproj b/src/Wpf.Ui.Abstractions/Wpf.Ui.Abstractions.csproj
index 213ce3c9d..4f26a6bf9 100644
--- a/src/Wpf.Ui.Abstractions/Wpf.Ui.Abstractions.csproj
+++ b/src/Wpf.Ui.Abstractions/Wpf.Ui.Abstractions.csproj
@@ -9,6 +9,14 @@
<_SilenceIsAotCompatibleUnsupportedWarning>true
+
+
+
+
diff --git a/src/Wpf.Ui.Extension.Template.Compact/ViewModels/Pages/DataViewModel.cs b/src/Wpf.Ui.Extension.Template.Compact/ViewModels/Pages/DataViewModel.cs
index fc5225155..78ef6636b 100644
--- a/src/Wpf.Ui.Extension.Template.Compact/ViewModels/Pages/DataViewModel.cs
+++ b/src/Wpf.Ui.Extension.Template.Compact/ViewModels/Pages/DataViewModel.cs
@@ -11,7 +11,7 @@ public partial class DataViewModel : ObservableObject, INavigationAware
[ObservableProperty]
private IEnumerable _colors;
- public Task OnNavigatedToAsync()
+ public ValueTask OnNavigatedToAsync()
{
if (!_isInitialized)
InitializeViewModel();
@@ -19,7 +19,7 @@ public Task OnNavigatedToAsync()
return Task.CompletedTask;
}
- public Task OnNavigatedFromAsync() => Task.CompletedTask;
+ public ValueTask OnNavigatedFromAsync() => Task.CompletedTask;
private void InitializeViewModel()
{
diff --git a/src/Wpf.Ui.Extension.Template.Compact/Wpf.Ui.Compact.csproj b/src/Wpf.Ui.Extension.Template.Compact/Wpf.Ui.Compact.csproj
index ab8dabeac..385a60c59 100644
--- a/src/Wpf.Ui.Extension.Template.Compact/Wpf.Ui.Compact.csproj
+++ b/src/Wpf.Ui.Extension.Template.Compact/Wpf.Ui.Compact.csproj
@@ -15,8 +15,8 @@
-
-
+
+
diff --git a/src/Wpf.Ui.Gallery/Controllers/MonacoController.cs b/src/Wpf.Ui.Gallery/Controllers/MonacoController.cs
index b6a51231a..4a9c61fbd 100644
--- a/src/Wpf.Ui.Gallery/Controllers/MonacoController.cs
+++ b/src/Wpf.Ui.Gallery/Controllers/MonacoController.cs
@@ -10,22 +10,15 @@
namespace Wpf.Ui.Gallery.Controllers;
-public class MonacoController
+public class MonacoController(WebView2 webView)
{
private const string EditorContainerSelector = "#root";
private const string EditorObject = "wpfUiMonacoEditor";
- private readonly WebView2 _webView;
-
- public MonacoController(WebView2 webView)
+ public Task CreateAsync()
{
- _webView = webView;
- }
-
- public async Task CreateAsync()
- {
- _ = await _webView.ExecuteScriptAsync(
+ return webView.ExecuteScriptAsync(
$$"""
const {{EditorObject}} = monaco.editor.create(document.querySelector('{{EditorContainerSelector}}'));
window.onresize = () => {{{EditorObject}}.layout();}
@@ -33,13 +26,13 @@ public async Task CreateAsync()
);
}
- public async Task SetThemeAsync(ApplicationTheme appApplicationTheme)
+ public Task SetThemeAsync(ApplicationTheme appApplicationTheme)
{
// TODO: Parse theme from object
const string uiThemeName = "wpf-ui-app-theme";
var baseMonacoTheme = appApplicationTheme == ApplicationTheme.Light ? "vs" : "vs-dark";
- _ = await _webView.ExecuteScriptAsync(
+ return webView.ExecuteScriptAsync(
$$$"""
monaco.editor.defineTheme('{{{uiThemeName}}}', {
base: '{{{baseMonacoTheme}}}',
@@ -51,32 +44,30 @@ public async Task SetThemeAsync(ApplicationTheme appApplicationTheme)
);
}
- public async Task SetLanguageAsync(MonacoLanguage monacoLanguage)
+ public Task SetLanguageAsync(MonacoLanguage monacoLanguage)
{
var languageId =
monacoLanguage == MonacoLanguage.ObjectiveC ? "objective-c" : monacoLanguage.ToString().ToLower();
- _ = await _webView.ExecuteScriptAsync(
+ return webView.ExecuteScriptAsync(
"monaco.editor.setModelLanguage(" + EditorObject + $".getModel(), \"{languageId}\");"
);
}
- public async Task SetContentAsync(string contents)
+ public Task SetContentAsync(string contents)
{
var literalContents = SymbolDisplay.FormatLiteral(contents, false);
- _ = await _webView.ExecuteScriptAsync(EditorObject + $".setValue(\"{literalContents}\");");
+ return webView.ExecuteScriptAsync(EditorObject + $".setValue(\"{literalContents}\");");
}
public void DispatchScript(string script)
{
- if (_webView == null)
+ if (webView == null)
{
return;
}
- _ = Application.Current.Dispatcher.InvokeAsync(async () =>
- await _webView!.ExecuteScriptAsync(script)
- );
+ _ = Application.Current.Dispatcher.InvokeAsync(async () => await webView!.ExecuteScriptAsync(script));
}
}
diff --git a/src/Wpf.Ui.Gallery/ViewModels/Pages/SettingsViewModel.cs b/src/Wpf.Ui.Gallery/ViewModels/Pages/SettingsViewModel.cs
index b3c693d58..ecdd219b5 100644
--- a/src/Wpf.Ui.Gallery/ViewModels/Pages/SettingsViewModel.cs
+++ b/src/Wpf.Ui.Gallery/ViewModels/Pages/SettingsViewModel.cs
@@ -23,7 +23,7 @@ public sealed partial class SettingsViewModel(INavigationService navigationServi
private NavigationViewPaneDisplayMode _currentApplicationNavigationStyle =
NavigationViewPaneDisplayMode.Left;
- public override void OnNavigatedTo()
+ public override void OnNavigatedTo(CancellationToken cancellationToken = default)
{
if (!_isInitialized)
{
diff --git a/src/Wpf.Ui.Gallery/ViewModels/ViewModel.cs b/src/Wpf.Ui.Gallery/ViewModels/ViewModel.cs
index d82d5a5e3..e8ec20af5 100644
--- a/src/Wpf.Ui.Gallery/ViewModels/ViewModel.cs
+++ b/src/Wpf.Ui.Gallery/ViewModels/ViewModel.cs
@@ -8,30 +8,30 @@ namespace Wpf.Ui.Gallery.ViewModels;
public abstract partial class ViewModel : ObservableObject, INavigationAware
{
///
- public virtual Task OnNavigatedToAsync()
+ public virtual ValueTask OnNavigatedToAsync(CancellationToken cancellationToken = default)
{
- OnNavigatedTo();
+ OnNavigatedTo(cancellationToken);
- return Task.CompletedTask;
+ return default;
}
///
/// Handles the event that is fired after the component is navigated to.
///
// ReSharper disable once MemberCanBeProtected.Global
- public virtual void OnNavigatedTo() { }
+ public virtual void OnNavigatedTo(CancellationToken cancellationToken = default) { }
///
- public virtual Task OnNavigatedFromAsync()
+ public virtual ValueTask OnNavigatedFromAsync(CancellationToken cancellationToken = default)
{
- OnNavigatedFrom();
+ OnNavigatedFrom(cancellationToken);
- return Task.CompletedTask;
+ return default;
}
///
/// Handles the event that is fired before the component is navigated from.
///
// ReSharper disable once MemberCanBeProtected.Global
- public virtual void OnNavigatedFrom() { }
+ public virtual void OnNavigatedFrom(CancellationToken cancellationToken = default) { }
}
diff --git a/src/Wpf.Ui.Gallery/Views/Pages/Navigation/NavigationViewPage.xaml b/src/Wpf.Ui.Gallery/Views/Pages/Navigation/NavigationViewPage.xaml
index a772a3279..f42c3db28 100644
--- a/src/Wpf.Ui.Gallery/Views/Pages/Navigation/NavigationViewPage.xaml
+++ b/src/Wpf.Ui.Gallery/Views/Pages/Navigation/NavigationViewPage.xaml
@@ -30,6 +30,8 @@
Margin="0"
IsBackButtonVisible="Auto"
IsPaneToggleVisible="True"
+ IsFooterSeparatorVisible="False"
+ IsTopSeparatorVisible="False"
PaneDisplayMode="Left"
PaneTitle="Pane Title">
@@ -109,6 +111,8 @@
Margin="0"
IsBackButtonVisible="Collapsed"
IsPaneToggleVisible="False"
+ IsFooterSeparatorVisible="False"
+ IsTopSeparatorVisible="False"
PaneDisplayMode="LeftFluent">
-
+
diff --git a/src/Wpf.Ui/Controls/NavigationView/NavigationView.Properties.cs b/src/Wpf.Ui/Controls/NavigationView/NavigationView.Properties.cs
index 43086aa16..912a73ab0 100644
--- a/src/Wpf.Ui/Controls/NavigationView/NavigationView.Properties.cs
+++ b/src/Wpf.Ui/Controls/NavigationView/NavigationView.Properties.cs
@@ -92,7 +92,7 @@ public partial class NavigationView
nameof(IsTopSeparatorVisible),
typeof(bool),
typeof(NavigationView),
- new FrameworkPropertyMetadata(true)
+ new FrameworkPropertyMetadata(false)
);
/// Identifies the dependency property.
@@ -100,7 +100,7 @@ public partial class NavigationView
nameof(IsFooterSeparatorVisible),
typeof(bool),
typeof(NavigationView),
- new FrameworkPropertyMetadata(true)
+ new FrameworkPropertyMetadata(false)
);
/// Identifies the dependency property.
diff --git a/src/Wpf.Ui/Controls/NavigationView/NavigationViewContentPresenter.cs b/src/Wpf.Ui/Controls/NavigationView/NavigationViewContentPresenter.cs
index a2279d5ad..d5c3d022e 100644
--- a/src/Wpf.Ui/Controls/NavigationView/NavigationViewContentPresenter.cs
+++ b/src/Wpf.Ui/Controls/NavigationView/NavigationViewContentPresenter.cs
@@ -136,7 +136,7 @@ protected override void OnInitialized(EventArgs e)
{
if (sender is NavigationViewContentPresenter navigator)
{
- NotifyContentAboutNavigatingFrom(navigator.Content);
+ ObserveValueTask(NotifyContentAboutNavigatingFrom(navigator.Content));
}
};
}
@@ -163,19 +163,25 @@ protected override void OnPreviewKeyDown(KeyEventArgs e)
base.OnPreviewKeyDown(e);
}
- protected virtual void OnNavigating(System.Windows.Navigation.NavigatingCancelEventArgs eventArgs)
+ protected virtual void OnNavigating(
+ System.Windows.Navigation.NavigatingCancelEventArgs eventArgs,
+ CancellationToken cancellationToken = default
+ )
{
- NotifyContentAboutNavigatingTo(eventArgs.Content);
+ ObserveValueTask(NotifyContentAboutNavigatingTo(eventArgs.Content, cancellationToken));
if (eventArgs.Navigator is not NavigationViewContentPresenter navigator)
{
return;
}
- NotifyContentAboutNavigatingFrom(navigator.Content);
+ ObserveValueTask(NotifyContentAboutNavigatingFrom(navigator.Content, cancellationToken));
}
- protected virtual void OnNavigated(NavigationEventArgs eventArgs)
+ protected virtual void OnNavigated(
+ NavigationEventArgs eventArgs,
+ CancellationToken cancellationToken = default
+ )
{
ApplyTransitionEffectToNavigatedPage(eventArgs.Content);
@@ -200,14 +206,28 @@ private void ApplyTransitionEffectToNavigatedPage(object content)
_ = TransitionAnimationProvider.ApplyTransition(content, Transition, TransitionDuration);
}
- private static void NotifyContentAboutNavigatingTo(object content)
+ private static ValueTask NotifyContentAboutNavigatingTo(
+ object content,
+ CancellationToken cancellationToken = default
+ )
{
- NotifyContentAboutNavigating(content, navigationAware => navigationAware.OnNavigatedToAsync());
+ return NotifyContentAboutNavigating(
+ content,
+ cancellationToken,
+ static (aware, ct) => aware.OnNavigatedToAsync(ct)
+ );
}
- private static void NotifyContentAboutNavigatingFrom(object content)
+ private static ValueTask NotifyContentAboutNavigatingFrom(
+ object content,
+ CancellationToken cancellationToken = default
+ )
{
- NotifyContentAboutNavigating(content, navigationAware => navigationAware.OnNavigatedFromAsync());
+ return NotifyContentAboutNavigating(
+ content,
+ cancellationToken,
+ static (aware, ct) => aware.OnNavigatedFromAsync(ct)
+ );
}
[System.Diagnostics.CodeAnalysis.SuppressMessage(
@@ -215,35 +235,75 @@ private static void NotifyContentAboutNavigatingFrom(object content)
"SuspiciousTypeConversion.Global",
Justification = "The library user might make a class inherit from both FrameworkElement and INavigationAware at the same time."
)]
- private static void NotifyContentAboutNavigating(object content, Func function)
+ private static ValueTask NotifyContentAboutNavigating(
+ object content,
+ CancellationToken cancellationToken,
+ Func function
+ )
{
- async void PerformNotify(INavigationAware navigationAware)
- {
- await function(navigationAware).ConfigureAwait(false);
- }
-
switch (content)
{
- // The order in which the OnNavigatedToAsync/OnNavigatedFromAsync methods of View and ViewModel are called
- // is not guaranteed
- case INavigationAware navigationAwareNavigationContent:
- PerformNotify(navigationAwareNavigationContent);
+ case INavigationAware navigationAware:
if (
- navigationAwareNavigationContent
- is FrameworkElement { DataContext: INavigationAware viewModel }
- && !ReferenceEquals(viewModel, navigationAwareNavigationContent)
+ navigationAware is FrameworkElement { DataContext: INavigationAware viewModel }
+ && !ReferenceEquals(viewModel, navigationAware)
)
{
- PerformNotify(viewModel);
+ ValueTask first = function(navigationAware, cancellationToken);
+
+ return first.IsCompletedSuccessfully
+ ? function(viewModel, cancellationToken)
+ : AwaitBoth(first, function, viewModel, cancellationToken);
}
- break;
- case INavigableView