diff --git a/Avalonia_Apps/AA16_UserControl/AA16_Usercontrol1/Directory.Packages.props b/Avalonia_Apps/AA16_UserControl/AA16_Usercontrol1/Directory.Packages.props
index 7d2a646c5..d9e976c52 100644
--- a/Avalonia_Apps/AA16_UserControl/AA16_Usercontrol1/Directory.Packages.props
+++ b/Avalonia_Apps/AA16_UserControl/AA16_Usercontrol1/Directory.Packages.props
@@ -3,13 +3,13 @@
true
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/Avalonia_Apps/AA21_Buttons/Directory.Packages.props b/Avalonia_Apps/AA21_Buttons/Directory.Packages.props
index c999c2ddc..b4e283877 100644
--- a/Avalonia_Apps/AA21_Buttons/Directory.Packages.props
+++ b/Avalonia_Apps/AA21_Buttons/Directory.Packages.props
@@ -6,15 +6,15 @@
-
+
-
-
+
+
-
+
@@ -22,8 +22,8 @@
-
-
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_AnimationTiming/Avln_AnimationTiming.csproj b/Avalonia_Apps/AvlnSamples/Avln_AnimationTiming/Avln_AnimationTiming.csproj
index 87d05b833..21257cf41 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_AnimationTiming/Avln_AnimationTiming.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_AnimationTiming/Avln_AnimationTiming.csproj
@@ -38,13 +38,13 @@
-
-
-
-
+
+
+
+
-
-
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_AnimationTimingTests/Avln_AnimationTimingTests.csproj b/Avalonia_Apps/AvlnSamples/Avln_AnimationTimingTests/Avln_AnimationTimingTests.csproj
index f21094cf9..cae31cbef 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_AnimationTimingTests/Avln_AnimationTimingTests.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_AnimationTimingTests/Avln_AnimationTimingTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/Avalonia_Apps/AvlnSamples/Avln_Brushes/Avln_Brushes.csproj b/Avalonia_Apps/AvlnSamples/Avln_Brushes/Avln_Brushes.csproj
index 66a1d3d6d..b3b35d7a1 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_Brushes/Avln_Brushes.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_Brushes/Avln_Brushes.csproj
@@ -23,12 +23,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_Complex_Layout/Avln_Complex_Layout.csproj b/Avalonia_Apps/AvlnSamples/Avln_Complex_Layout/Avln_Complex_Layout.csproj
index 222487679..bd84dad7f 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_Complex_Layout/Avln_Complex_Layout.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_Complex_Layout/Avln_Complex_Layout.csproj
@@ -18,14 +18,14 @@
-
-
-
-
+
+
+
+
-
-
-
+
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_Complex_LayoutTests/Avln_Complex_LayoutTests.csproj b/Avalonia_Apps/AvlnSamples/Avln_Complex_LayoutTests/Avln_Complex_LayoutTests.csproj
index 839b6903e..4ff71aaa1 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_Complex_LayoutTests/Avln_Complex_LayoutTests.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_Complex_LayoutTests/Avln_Complex_LayoutTests.csproj
@@ -4,10 +4,10 @@
false
-
-
+
+
-
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_CustomAnimation/Avln_CustomAnimation.csproj b/Avalonia_Apps/AvlnSamples/Avln_CustomAnimation/Avln_CustomAnimation.csproj
index 63862325f..da3ae96b1 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_CustomAnimation/Avln_CustomAnimation.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_CustomAnimation/Avln_CustomAnimation.csproj
@@ -12,12 +12,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_Geometry/Avln_Geometry.csproj b/Avalonia_Apps/AvlnSamples/Avln_Geometry/Avln_Geometry.csproj
index 446bb6fdd..2fdd96f36 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_Geometry/Avln_Geometry.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_Geometry/Avln_Geometry.csproj
@@ -25,12 +25,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_Hello_World/Avln_Hello_World.csproj b/Avalonia_Apps/AvlnSamples/Avln_Hello_World/Avln_Hello_World.csproj
index 9c84291c8..e6662ed76 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_Hello_World/Avln_Hello_World.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_Hello_World/Avln_Hello_World.csproj
@@ -18,13 +18,13 @@
-
-
-
-
+
+
+
+
-
-
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_Hello_WorldTests/Avln_Hello_WorldTests.csproj b/Avalonia_Apps/AvlnSamples/Avln_Hello_WorldTests/Avln_Hello_WorldTests.csproj
index eb94f5e12..fabea28f5 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_Hello_WorldTests/Avln_Hello_WorldTests.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_Hello_WorldTests/Avln_Hello_WorldTests.csproj
@@ -9,13 +9,13 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_ImageView/Avln_ImageView.csproj b/Avalonia_Apps/AvlnSamples/Avln_ImageView/Avln_ImageView.csproj
index e03ab9786..605326e7d 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_ImageView/Avln_ImageView.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_ImageView/Avln_ImageView.csproj
@@ -13,13 +13,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_IntegrationTestApp/Avln_IntegrationTestApp.csproj b/Avalonia_Apps/AvlnSamples/Avln_IntegrationTestApp/Avln_IntegrationTestApp.csproj
index 6c0bc5da7..4c455362c 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_IntegrationTestApp/Avln_IntegrationTestApp.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_IntegrationTestApp/Avln_IntegrationTestApp.csproj
@@ -22,13 +22,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_MoveWindow/Avln_MoveWindow.csproj b/Avalonia_Apps/AvlnSamples/Avln_MoveWindow/Avln_MoveWindow.csproj
index ca8939b6b..e2a0ee05b 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_MoveWindow/Avln_MoveWindow.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_MoveWindow/Avln_MoveWindow.csproj
@@ -18,13 +18,13 @@
-
-
-
-
+
+
+
+
-
-
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_MoveWindowTests/Avln_MoveWindowTests.csproj b/Avalonia_Apps/AvlnSamples/Avln_MoveWindowTests/Avln_MoveWindowTests.csproj
index 673f33e8d..ccc38fe44 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_MoveWindowTests/Avln_MoveWindowTests.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_MoveWindowTests/Avln_MoveWindowTests.csproj
@@ -9,13 +9,13 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_RenderDemo/Avln_RenderDemo.csproj b/Avalonia_Apps/AvlnSamples/Avln_RenderDemo/Avln_RenderDemo.csproj
index 8781ed6f8..2ca3d63f7 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_RenderDemo/Avln_RenderDemo.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_RenderDemo/Avln_RenderDemo.csproj
@@ -13,13 +13,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_Sample_Template/Avln_Sample_Template.csproj b/Avalonia_Apps/AvlnSamples/Avln_Sample_Template/Avln_Sample_Template.csproj
index e4322298f..b8cb57a02 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_Sample_Template/Avln_Sample_Template.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_Sample_Template/Avln_Sample_Template.csproj
@@ -18,13 +18,13 @@
-
-
-
-
+
+
+
+
-
-
+
+
diff --git a/Avalonia_Apps/AvlnSamples/Avln_TextTestApp/Avln_TextTestApp.csproj b/Avalonia_Apps/AvlnSamples/Avln_TextTestApp/Avln_TextTestApp.csproj
index c915091eb..341fbf652 100644
--- a/Avalonia_Apps/AvlnSamples/Avln_TextTestApp/Avln_TextTestApp.csproj
+++ b/Avalonia_Apps/AvlnSamples/Avln_TextTestApp/Avln_TextTestApp.csproj
@@ -10,10 +10,10 @@
-
-
-
-
+
+
+
+
diff --git a/Avalonia_Apps/AvlnSamples/SampleControls/ControlSamples.Pack.csproj b/Avalonia_Apps/AvlnSamples/SampleControls/ControlSamples.Pack.csproj
index 33502dca4..33f8a20eb 100644
--- a/Avalonia_Apps/AvlnSamples/SampleControls/ControlSamples.Pack.csproj
+++ b/Avalonia_Apps/AvlnSamples/SampleControls/ControlSamples.Pack.csproj
@@ -23,7 +23,7 @@
-
+
diff --git a/Avalonia_Apps/BenchmarkSuite1/BenchmarkSuite1.csproj b/Avalonia_Apps/BenchmarkSuite1/BenchmarkSuite1.csproj
index c86ecea83..1556596f7 100644
--- a/Avalonia_Apps/BenchmarkSuite1/BenchmarkSuite1.csproj
+++ b/Avalonia_Apps/BenchmarkSuite1/BenchmarkSuite1.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/Avalonia_Apps/Libraries/Avln_BaseLib/Avln_BaseLib.csproj b/Avalonia_Apps/Libraries/Avln_BaseLib/Avln_BaseLib.csproj
index e9895b7b4..cfa2854a4 100644
--- a/Avalonia_Apps/Libraries/Avln_BaseLib/Avln_BaseLib.csproj
+++ b/Avalonia_Apps/Libraries/Avln_BaseLib/Avln_BaseLib.csproj
@@ -26,10 +26,10 @@
-
-
-
-
+
+
+
+
diff --git a/Avalonia_Apps/Libraries/Avln_BaseLibTests/Avln_BaseLibTests.csproj b/Avalonia_Apps/Libraries/Avln_BaseLibTests/Avln_BaseLibTests.csproj
index 3ac77ba3f..b24aa4ce8 100644
--- a/Avalonia_Apps/Libraries/Avln_BaseLibTests/Avln_BaseLibTests.csproj
+++ b/Avalonia_Apps/Libraries/Avln_BaseLibTests/Avln_BaseLibTests.csproj
@@ -15,15 +15,15 @@
-
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/Avalonia_Apps/Libraries/BaseLib/BaseLib.csproj b/Avalonia_Apps/Libraries/BaseLib/BaseLib.csproj
index 5c678ac98..c6fd681ff 100644
--- a/Avalonia_Apps/Libraries/BaseLib/BaseLib.csproj
+++ b/Avalonia_Apps/Libraries/BaseLib/BaseLib.csproj
@@ -30,7 +30,7 @@
-
-
+
+
\ No newline at end of file
diff --git a/Avalonia_Apps/Libraries/BaseLibTests/BaseLibTests.csproj b/Avalonia_Apps/Libraries/BaseLibTests/BaseLibTests.csproj
index 9af5da953..54f402aab 100644
--- a/Avalonia_Apps/Libraries/BaseLibTests/BaseLibTests.csproj
+++ b/Avalonia_Apps/Libraries/BaseLibTests/BaseLibTests.csproj
@@ -15,8 +15,8 @@
$(TargetFrameworks);net10.0
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/Avalonia_Apps/Packages.props b/Avalonia_Apps/Packages.props
index 2d16d64d5..0bf91cefc 100644
--- a/Avalonia_Apps/Packages.props
+++ b/Avalonia_Apps/Packages.props
@@ -6,34 +6,34 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
-
+
+
\ No newline at end of file
diff --git a/Avalonia_Apps/RenderImage.BaseTests/RenderImage.BaseTests.csproj b/Avalonia_Apps/RenderImage.BaseTests/RenderImage.BaseTests.csproj
index 4532ef592..d01ad3802 100644
--- a/Avalonia_Apps/RenderImage.BaseTests/RenderImage.BaseTests.csproj
+++ b/Avalonia_Apps/RenderImage.BaseTests/RenderImage.BaseTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/AboutEx/AboutEx.csproj b/CSharpBible/AboutEx/AboutEx.csproj
index b89a9292c..6b307f8a5 100644
--- a/CSharpBible/AboutEx/AboutEx.csproj
+++ b/CSharpBible/AboutEx/AboutEx.csproj
@@ -13,8 +13,8 @@
CSharpBible.AboutEx
-
-
+
+
diff --git a/CSharpBible/AboutExTests/AboutExTests.csproj b/CSharpBible/AboutExTests/AboutExTests.csproj
index d8fddf4e0..0d43f6f74 100644
--- a/CSharpBible/AboutExTests/AboutExTests.csproj
+++ b/CSharpBible/AboutExTests/AboutExTests.csproj
@@ -12,9 +12,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Basics/Basic_Del00_Template/Basic_Del00_Template.csproj b/CSharpBible/Basics/Basic_Del00_Template/Basic_Del00_Template.csproj
index 79bcdb991..45cf4cdd8 100644
--- a/CSharpBible/Basics/Basic_Del00_Template/Basic_Del00_Template.csproj
+++ b/CSharpBible/Basics/Basic_Del00_Template/Basic_Del00_Template.csproj
@@ -16,8 +16,8 @@
-
-
+
+
diff --git a/CSharpBible/Basics/Basic_Del00_TemplateTests/Basic_Del00_TemplateTests.csproj b/CSharpBible/Basics/Basic_Del00_TemplateTests/Basic_Del00_TemplateTests.csproj
index f342e8d0b..e1a8e3500 100644
--- a/CSharpBible/Basics/Basic_Del00_TemplateTests/Basic_Del00_TemplateTests.csproj
+++ b/CSharpBible/Basics/Basic_Del00_TemplateTests/Basic_Del00_TemplateTests.csproj
@@ -13,9 +13,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -26,6 +26,6 @@
-
+
diff --git a/CSharpBible/Basics/Basic_Del01_Action/Basic_Del01_Action.csproj b/CSharpBible/Basics/Basic_Del01_Action/Basic_Del01_Action.csproj
index 141d46b50..34744af43 100644
--- a/CSharpBible/Basics/Basic_Del01_Action/Basic_Del01_Action.csproj
+++ b/CSharpBible/Basics/Basic_Del01_Action/Basic_Del01_Action.csproj
@@ -19,8 +19,8 @@
-
-
+
+
diff --git a/CSharpBible/Basics/Basic_Del01_ActionTests/Basic_Del01_ActionTests.csproj b/CSharpBible/Basics/Basic_Del01_ActionTests/Basic_Del01_ActionTests.csproj
index 527fc311d..f0d0c967d 100644
--- a/CSharpBible/Basics/Basic_Del01_ActionTests/Basic_Del01_ActionTests.csproj
+++ b/CSharpBible/Basics/Basic_Del01_ActionTests/Basic_Del01_ActionTests.csproj
@@ -13,9 +13,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Basics/Basic_Del02_Filter/Basic_Del02_Filter.csproj b/CSharpBible/Basics/Basic_Del02_Filter/Basic_Del02_Filter.csproj
index 09a935d50..ba3ec99c5 100644
--- a/CSharpBible/Basics/Basic_Del02_Filter/Basic_Del02_Filter.csproj
+++ b/CSharpBible/Basics/Basic_Del02_Filter/Basic_Del02_Filter.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/CSharpBible/Basics/Basic_Del02_FilterTests/Basic_Del02_FilterTests.csproj b/CSharpBible/Basics/Basic_Del02_FilterTests/Basic_Del02_FilterTests.csproj
index f0b33e6f8..0baf77e5c 100644
--- a/CSharpBible/Basics/Basic_Del02_FilterTests/Basic_Del02_FilterTests.csproj
+++ b/CSharpBible/Basics/Basic_Del02_FilterTests/Basic_Del02_FilterTests.csproj
@@ -13,9 +13,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Basics/Basic_Del03_General/Basic_Del03_General.csproj b/CSharpBible/Basics/Basic_Del03_General/Basic_Del03_General.csproj
index 1a2623cb9..a57d3d602 100644
--- a/CSharpBible/Basics/Basic_Del03_General/Basic_Del03_General.csproj
+++ b/CSharpBible/Basics/Basic_Del03_General/Basic_Del03_General.csproj
@@ -16,8 +16,8 @@
-
-
+
+
diff --git a/CSharpBible/Basics/Basic_Del03_GeneralTests/Basic_Del03_GeneralTests.csproj b/CSharpBible/Basics/Basic_Del03_GeneralTests/Basic_Del03_GeneralTests.csproj
index 77bd2fd12..5a812c3bb 100644
--- a/CSharpBible/Basics/Basic_Del03_GeneralTests/Basic_Del03_GeneralTests.csproj
+++ b/CSharpBible/Basics/Basic_Del03_GeneralTests/Basic_Del03_GeneralTests.csproj
@@ -13,9 +13,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Basics/Basic_Del04_TestImposibleStuff/Basic_Del04_TestImposibleStuff.csproj b/CSharpBible/Basics/Basic_Del04_TestImposibleStuff/Basic_Del04_TestImposibleStuff.csproj
index a7be6aa9b..9cdc5f0c1 100644
--- a/CSharpBible/Basics/Basic_Del04_TestImposibleStuff/Basic_Del04_TestImposibleStuff.csproj
+++ b/CSharpBible/Basics/Basic_Del04_TestImposibleStuff/Basic_Del04_TestImposibleStuff.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/CSharpBible/Basics/Basic_Del04_TestImposibleStuffTests/Basic_Del04_TestImposibleStuffTests.csproj b/CSharpBible/Basics/Basic_Del04_TestImposibleStuffTests/Basic_Del04_TestImposibleStuffTests.csproj
index 1c3a49b0d..a35304b0a 100644
--- a/CSharpBible/Basics/Basic_Del04_TestImposibleStuffTests/Basic_Del04_TestImposibleStuffTests.csproj
+++ b/CSharpBible/Basics/Basic_Del04_TestImposibleStuffTests/Basic_Del04_TestImposibleStuffTests.csproj
@@ -13,9 +13,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/CSharpBible.sln b/CSharpBible/CSharpBible.sln
index 7b314ff76..d17c8b552 100644
--- a/CSharpBible/CSharpBible.sln
+++ b/CSharpBible/CSharpBible.sln
@@ -158,6 +158,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobile", "Mobile", "{8CCD8B
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Games", "Games", "{947E3943-6DE0-46E7-9106-BCE8C6E812E0}"
ProjectSection(SolutionItems) = preProject
+ Games\Directory.Packages.props = Games\Directory.Packages.props
Games\Games.props = Games\Games.props
Games\Games_net.props = Games\Games_net.props
SomeThing\Solution.props = SomeThing\Solution.props
@@ -427,7 +428,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_00_TemplateTests", "MV
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_06_Converters_4_net", "MVVM_Tutorial\MVVM_06_Converters_4\MVVM_06_Converters_4_net.csproj", "{70AD3FCB-F529-4E08-BE39-E56C940EA114}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_16_Usercontrol1_net", "MVVM_Tutorial\MVVM_16_Usercontrol1\MVVM_16_UserControl1_net.csproj", "{CDC8B1F7-3C94-4686-9EE0-6841231E6144}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_16_UserControl1_net", "MVVM_Tutorial\MVVM_16_Usercontrol1\MVVM_16_UserControl1_net.csproj", "{CDC8B1F7-3C94-4686-9EE0-6841231E6144}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Simulation", "Simulation", "{0DF8EC71-8008-41CF-9A87-946604FBD24D}"
ProjectSection(SolutionItems) = preProject
@@ -848,6 +849,9 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_AllExamples_netTests", "MVVM_Tutorial\MVVM_AllExamplesTests\MVVM_AllExamples_netTests.csproj", "{687EFF77-3468-444D-A410-1B76E41E74FC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SomeThing", "SomeThing", "{72BE345F-8168-4D28-895C-2A22010B39C8}"
+ ProjectSection(SolutionItems) = preProject
+ SomeThing\README.md = SomeThing\README.md
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quine1", "SomeThing\Quine1\Quine1.csproj", "{CC31DD38-B57D-4A71-9681-E9D7DDFB8909}"
EndProject
@@ -1099,6 +1103,19 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Document.Xaml", "Data\Docum
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Story.Base", "Data\Story.Base\Story.Base.csproj", "{A06D0241-A272-9A48-0BDC-00B60E27D924}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Snake", "Snake", "{175441F2-40F8-410C-AAE1-B79760244304}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Quine", "Quine", "{0E1CB7B2-F372-4F6D-A071-021C7B0BE80C}"
+ ProjectSection(SolutionItems) = preProject
+ SomeThing\README.md = SomeThing\README.md
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quine4", "SomeThing\Quine4\Quine4.csproj", "{3E692837-3E14-86AF-8F4B-1CE45081E1B1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quine5", "SomeThing\Quine5\Quine5.csproj", "{E2411CA0-1AD4-1A5A-B440-04EB09184818}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Quine6", "SomeThing\Quine6\Quine6.csproj", "{0DA4D107-D40D-C3C7-089B-A16980E49CEA}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -6789,6 +6806,42 @@ Global
{A06D0241-A272-9A48-0BDC-00B60E27D924}.Release|x64.Build.0 = Release|Any CPU
{A06D0241-A272-9A48-0BDC-00B60E27D924}.Release|x86.ActiveCfg = Release|Any CPU
{A06D0241-A272-9A48-0BDC-00B60E27D924}.Release|x86.Build.0 = Release|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Debug|x64.Build.0 = Debug|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Debug|x86.Build.0 = Debug|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Release|x64.ActiveCfg = Release|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Release|x64.Build.0 = Release|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Release|x86.ActiveCfg = Release|Any CPU
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1}.Release|x86.Build.0 = Release|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Debug|x64.Build.0 = Debug|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Debug|x86.Build.0 = Debug|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Release|x64.ActiveCfg = Release|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Release|x64.Build.0 = Release|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Release|x86.ActiveCfg = Release|Any CPU
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818}.Release|x86.Build.0 = Release|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Debug|x64.Build.0 = Debug|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Debug|x86.Build.0 = Debug|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Release|x64.ActiveCfg = Release|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Release|x64.Build.0 = Release|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Release|x86.ActiveCfg = Release|Any CPU
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -6883,8 +6936,8 @@ Global
{27777C75-0DA7-4489-BE60-51E74F921090} = {465E6B8C-A028-4C99-86E7-2710FFC62901}
{9EA5388E-5333-4C8A-8B27-8E16AC4E7137} = {7BA535EF-38FA-47A6-A6BD-5D6333D5DB10}
{385737C2-FB69-44AD-ACBB-A2CBE11686E4} = {E1D77C39-936E-4ADB-8350-74B5A4401280}
- {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0}
- {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0}
+ {F30BC8EB-5AC7-4FD0-A5B7-33057AEF8ECA} = {175441F2-40F8-410C-AAE1-B79760244304}
+ {9D934BB9-B0C6-4CBC-81AB-35AFC52784EE} = {175441F2-40F8-410C-AAE1-B79760244304}
{33D1CD60-0C70-4645-A50E-CA82F83CE0A5} = {7BA535EF-38FA-47A6-A6BD-5D6333D5DB10}
{E8D9DBBF-0516-4FA7-A5D0-F66DFD196C5C} = {9E686C3B-3AF8-4C7F-9F71-F09EF3E12031}
{4B6719F3-89B1-4C4F-9690-150D0ABDA36F} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0}
@@ -7154,9 +7207,9 @@ Global
{42EA49AE-5C87-4C75-83EF-964D4B24E9E9} = {4C78BE6F-C572-41FC-917E-B8587E10596F}
{75423717-B64A-4EAC-9762-CD17A2F60857} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9}
{687EFF77-3468-444D-A410-1B76E41E74FC} = {1BD34A20-4B18-43A2-AEEE-1E24B93C8BC9}
- {CC31DD38-B57D-4A71-9681-E9D7DDFB8909} = {72BE345F-8168-4D28-895C-2A22010B39C8}
- {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF} = {72BE345F-8168-4D28-895C-2A22010B39C8}
- {4879406D-8F0C-4EDF-A7EB-CB549E510E03} = {72BE345F-8168-4D28-895C-2A22010B39C8}
+ {CC31DD38-B57D-4A71-9681-E9D7DDFB8909} = {0E1CB7B2-F372-4F6D-A071-021C7B0BE80C}
+ {B57AAB4C-0BA8-46B9-B365-F941A54F4DEF} = {0E1CB7B2-F372-4F6D-A071-021C7B0BE80C}
+ {4879406D-8F0C-4EDF-A7EB-CB549E510E03} = {0E1CB7B2-F372-4F6D-A071-021C7B0BE80C}
{DE121B38-5563-463D-B4B0-0817E75F4DDB} = {37C1201C-8936-4BAC-9BA1-7B8CAB87BD60}
{827CB9D9-EE91-47E1-BCF3-3DAC2C45EE57} = {37C1201C-8936-4BAC-9BA1-7B8CAB87BD60}
{391D26F2-FAFB-4113-9C80-4DA54BCE5D4A} = {827CB9D9-EE91-47E1-BCF3-3DAC2C45EE57}
@@ -7209,7 +7262,7 @@ Global
{5E9D2F06-E4E1-4E2E-BE1A-A0F7E0CF785C} = {71DD55F8-E61A-49E8-B841-72984B85D38B}
{CE9E0C11-AACD-4F57-8C1B-7210AFABCA19} = {A7AA5940-00E1-4F63-B85A-90BF6A35EA05}
{7EE327D2-B598-4F77-A889-04EB6949A6BB} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0}
- {2399EFC7-01EC-4574-9552-1A84857B076E} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0}
+ {2399EFC7-01EC-4574-9552-1A84857B076E} = {175441F2-40F8-410C-AAE1-B79760244304}
{69E4FEBA-5470-4BAC-8848-AF4ECA3DC9BD} = {71DD55F8-E61A-49E8-B841-72984B85D38B}
{D8A95DA6-F62B-3E10-BC72-FABE1D9146F4} = {9E686C3B-3AF8-4C7F-9F71-F09EF3E12031}
{501893AF-503A-30CC-ECDA-DFAC435E6D10} = {71DD55F8-E61A-49E8-B841-72984B85D38B}
@@ -7274,6 +7327,11 @@ Global
{2ED77FB7-8A9C-0D43-368C-9CEFF79BADE1} = {C59CD07D-726D-36FF-06E5-2CFE8C4AA341}
{D19418F6-67A8-763C-B179-193233BB812C} = {C59CD07D-726D-36FF-06E5-2CFE8C4AA341}
{A06D0241-A272-9A48-0BDC-00B60E27D924} = {050F69CA-1EB1-4D46-B52C-018637E6D525}
+ {175441F2-40F8-410C-AAE1-B79760244304} = {947E3943-6DE0-46E7-9106-BCE8C6E812E0}
+ {0E1CB7B2-F372-4F6D-A071-021C7B0BE80C} = {72BE345F-8168-4D28-895C-2A22010B39C8}
+ {3E692837-3E14-86AF-8F4B-1CE45081E1B1} = {0E1CB7B2-F372-4F6D-A071-021C7B0BE80C}
+ {E2411CA0-1AD4-1A5A-B440-04EB09184818} = {0E1CB7B2-F372-4F6D-A071-021C7B0BE80C}
+ {0DA4D107-D40D-C3C7-089B-A16980E49CEA} = {0E1CB7B2-F372-4F6D-A071-021C7B0BE80C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {DAF8B3ED-D51A-4CDA-8BF1-1E032CF0AC4F}
diff --git a/CSharpBible/Calc/Calc32/NonVisual/CalculatorClass.cs b/CSharpBible/Calc/Calc32/NonVisual/CalculatorClass.cs
deleted file mode 100644
index b9cca5e93..000000000
--- a/CSharpBible/Calc/Calc32/NonVisual/CalculatorClass.cs
+++ /dev/null
@@ -1,244 +0,0 @@
-// ***********************************************************************
-// Assembly : Calc32
-// Author : Mir
-// Created : 12-19-2021
-//
-// Last Modified By : Mir
-// Last Modified On : 10-22-2022
-// ***********************************************************************
-//
-// Copyright © JC-Soft 2020
-//
-//
-// ***********************************************************************
-using BaseLib.Helper;
-using System;
-using System.ComponentModel;
-
-///
-/// The NonVisual namespace.
-///
-namespace Calc32.NonVisual
-
-{
- ///
- /// Class CalculatorClass.
- /// Implements the
- ///
- public class CalculatorClass : Component
- {
- ///
- /// Enum Mode
- /// of Operation
- ///
- public enum eOpMode
- {
- ///
- /// No mode
- ///
- NoMode = 0,
-
- ///
- /// The calculate result
- ///
- CalcResult = 1,
- ///
- /// The plus mode
- ///
- Plus = 2,
- ///
- /// The minus mode
- ///
- Minus = 3,
- ///
- /// The multiply mode
- ///
- Multiply = 4,
- ///
- /// The divide
- /// mode
- ///
- Divide = 5,
- ///
- /// The binary and
- /// mode
- ///
- BinaryAnd = 6,
- ///
- /// The binary or
- /// mode
- ///
- BinaryOr = 7,
- ///
- /// The binary xor
- /// mode
- ///
- BinaryXor = 8,
- ///
- /// The binary not
- /// mode
- ///
- BinaryNot = 9,
- ///
- /// The binary not
- /// mode
- ///
- Negate = 10
- };
-
- #region Property
- #region private property
- // Fields
- ///
- /// The accumulator
- ///
- private int nAccumulator; // Editorfeld
- ///
- /// The n mode
- ///
- private eOpMode nMode { get => _nMode; set => value.SetProperty(ref _nMode, FireModeChangeEvent); }
-
- ///
- /// The b edit mode
- ///
- private bool bEditMode;
- // private bool bNegMode;
- ///
- /// The n memory
- ///
- private int nMemory; // Gemerkte Zahl für Operationen
- private eOpMode _nMode;
- #endregion
-
- ///
- /// The mode-string
- ///
- public readonly static string[] sMode = { "", "=", "+", "-", "*", "/", "&", "|", "x", "!" };
- ///
- /// Occurs when a change happens.
- ///
- public event EventHandler<(string,object?,object?)>? OnChange;
-
- // Properties
- ///
- /// Gets or sets the accumulator.
- ///
- /// The accumulator.
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
- public int Accumulator
- {
- get => nAccumulator;
- set => value.SetProperty(ref nAccumulator, FireChangeEvent);
- }
-
- ///
- /// Gets or sets the memory.
- ///
- /// The memory.
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
- public int Memory
- {
- get => nMemory;
- set => value.SetProperty(ref nMemory, FireChangeEvent);
- }
-
-
- ///
- /// Gets the operation text.
- ///
- /// The operation text.
- public string OperationText => sMode[(int)nMode];
- #endregion
-
- #region Methode
- ///
- /// Initializes a new instance of the class.
- ///
- public CalculatorClass()
- {
- nAccumulator = 0;
- nMode = 0;
- OnChange = null;
- }
- private void FireChangeEvent(string Prop, int ol, int nw)
- {
- OnChange?.Invoke(this, (Prop,ol,nw));
- }
-
- private void FireModeChangeEvent(string arg1, eOpMode arg2, eOpMode arg3)
- {
- OnChange?.Invoke(this,(nameof(OperationText), sMode[(int)arg2], sMode[(int)arg3]));
- }
-
-
- ///
- /// Button of Numbers.
- ///
- /// a number.
- public void NumberButton(int aNumber)
- {
- if (bEditMode)
- {
- if (nAccumulator < int.MaxValue / 10)
- {
- Accumulator = nAccumulator * 10 + aNumber;
- }
- }
- else
- {
- bEditMode = true;
- Accumulator = aNumber;
- }
- }
-
- ///
- /// Executes the specified Operation.
- ///
- /// The operation.
- public void Operation(int v)
- {
- if ((v > 0) && (v <= (int)eOpMode.Negate))
- {
- bEditMode &= (v ==(int)eOpMode.Negate);
- Accumulator = nMode switch
- {
- eOpMode.Plus => nMemory + nAccumulator,
- eOpMode.Minus => nMemory - nAccumulator,
- eOpMode.Multiply => nMemory * nAccumulator,
- eOpMode.Divide => nMemory / nAccumulator,
- eOpMode.BinaryAnd => nMemory & nAccumulator,
- eOpMode.BinaryOr => nMemory | nAccumulator,
- eOpMode.BinaryXor => nMemory ^ nAccumulator,
- _ => nAccumulator
- };
-
- if ((eOpMode)v == eOpMode.CalcResult)
- {
- nMode = (eOpMode)v;
- Memory = 0;
- }
- else if ((eOpMode) v == eOpMode.BinaryNot)
- {
- Accumulator = ~nAccumulator;
- }
- else if ((eOpMode)v == eOpMode.Negate)
- {
- Accumulator = -nAccumulator;
- }
- else
- {
- nMode = (eOpMode)v;
- Memory = nAccumulator;
- }
-
- }
- }
-
- ///
- /// Backs the space.
- ///
- public void BackSpace()
- => Accumulator = bEditMode ? nAccumulator / 10 : 0;
- #endregion
- }
-}
diff --git a/CSharpBible/Calc/Calc32/Program.cs b/CSharpBible/Calc/Calc32/Program.cs
index 72e8c6858..0260d049a 100644
--- a/CSharpBible/Calc/Calc32/Program.cs
+++ b/CSharpBible/Calc/Calc32/Program.cs
@@ -25,36 +25,35 @@
/// The Calc32 namespace.
///
///
-namespace CSharpBible.Calc32
+namespace Calc32;
+
+///
+/// Class Program.
+///
+public static class Program
{
+
///
- /// Class Program.
+ /// Der Haupteinstiegspunkt für die Anwendung.
///
- public static class Program
+ [STAThread]
+ public static void Main()
{
-
- ///
- /// Der Haupteinstiegspunkt für die Anwendung.
- ///
- [STAThread]
- public static void Main()
- {
- Init();
- Application.EnableVisualStyles();
+ Init();
+ Application.EnableVisualStyles();
// Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(Ioc.Default.GetRequiredService
-
-
+
+
diff --git a/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp_net.csproj b/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp_net.csproj
index 2feaabfbb..5a9d7aaa5 100644
--- a/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp_net.csproj
+++ b/CSharpBible/ConsoleApps/ConsoleMouseApp/ConsoleMouseApp_net.csproj
@@ -27,8 +27,8 @@
-
-
+
+
diff --git a/CSharpBible/ConsoleApps/TestConsoleDemo/TestConsoleDemo.csproj b/CSharpBible/ConsoleApps/TestConsoleDemo/TestConsoleDemo.csproj
index 1778f2600..617333cfa 100644
--- a/CSharpBible/ConsoleApps/TestConsoleDemo/TestConsoleDemo.csproj
+++ b/CSharpBible/ConsoleApps/TestConsoleDemo/TestConsoleDemo.csproj
@@ -25,8 +25,8 @@
-
-
+
+
\ No newline at end of file
diff --git a/CSharpBible/ConsoleApps/TestConsoleTests/TestConsoleTests.csproj b/CSharpBible/ConsoleApps/TestConsoleTests/TestConsoleTests.csproj
index 967446997..8007f278e 100644
--- a/CSharpBible/ConsoleApps/TestConsoleTests/TestConsoleTests.csproj
+++ b/CSharpBible/ConsoleApps/TestConsoleTests/TestConsoleTests.csproj
@@ -19,8 +19,8 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/ConsoleApps/WaveFuncCol/WaveFunCollapse.csproj b/CSharpBible/ConsoleApps/WaveFuncCol/WaveFunCollapse.csproj
index 75e2ec3d9..41f070acf 100644
--- a/CSharpBible/ConsoleApps/WaveFuncCol/WaveFunCollapse.csproj
+++ b/CSharpBible/ConsoleApps/WaveFuncCol/WaveFunCollapse.csproj
@@ -24,7 +24,7 @@
-
+
diff --git a/CSharpBible/ConsoleApps/WaveFuncColFrm/WaveFuncColFrm.csproj b/CSharpBible/ConsoleApps/WaveFuncColFrm/WaveFuncColFrm.csproj
index 9b329536e..00b57a9b9 100644
--- a/CSharpBible/ConsoleApps/WaveFuncColFrm/WaveFuncColFrm.csproj
+++ b/CSharpBible/ConsoleApps/WaveFuncColFrm/WaveFuncColFrm.csproj
@@ -24,8 +24,8 @@
-
-
+
+
\ No newline at end of file
diff --git a/CSharpBible/DB/DBTest1/DBTest1.csproj b/CSharpBible/DB/DBTest1/DBTest1.csproj
index 431bfd3d8..7370e68b8 100644
--- a/CSharpBible/DB/DBTest1/DBTest1.csproj
+++ b/CSharpBible/DB/DBTest1/DBTest1.csproj
@@ -12,7 +12,7 @@
-->
-
+
diff --git a/CSharpBible/DB/FoxCon/FoxCon.csproj b/CSharpBible/DB/FoxCon/FoxCon.csproj
index 3def81ef0..87686e905 100644
--- a/CSharpBible/DB/FoxCon/FoxCon.csproj
+++ b/CSharpBible/DB/FoxCon/FoxCon.csproj
@@ -19,8 +19,8 @@
-
-
+
+
diff --git a/CSharpBible/DB/MdbBrowser/MdbBrowser.csproj b/CSharpBible/DB/MdbBrowser/MdbBrowser.csproj
index 1f76463c8..dd76927f9 100644
--- a/CSharpBible/DB/MdbBrowser/MdbBrowser.csproj
+++ b/CSharpBible/DB/MdbBrowser/MdbBrowser.csproj
@@ -2,14 +2,20 @@
WinExe
- net481;net472;net462;net6.0-windows;net7.0-windows;net8.0-windows;net9.0-windows
+ net481;net472;net462;net8.0-windows
enable
true
AnyCPU;x86
-
+
+ $(TargetFrameworks);net9.0-windows
+
+
+ $(TargetFrameworks);net10.0-windows
+
+
@@ -20,9 +26,9 @@
-
-
-
+
+
+
diff --git a/CSharpBible/DB/MdbBrowserTests/MdbBrowserTests.csproj b/CSharpBible/DB/MdbBrowserTests/MdbBrowserTests.csproj
index 94a916268..969471750 100644
--- a/CSharpBible/DB/MdbBrowserTests/MdbBrowserTests.csproj
+++ b/CSharpBible/DB/MdbBrowserTests/MdbBrowserTests.csproj
@@ -20,8 +20,8 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/DB/OLEDBTest/OleDbTest.csproj b/CSharpBible/DB/OLEDBTest/OleDbTest.csproj
index 0f4c16579..2f7977719 100644
--- a/CSharpBible/DB/OLEDBTest/OleDbTest.csproj
+++ b/CSharpBible/DB/OLEDBTest/OleDbTest.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/CSharpBible/DB/OLEDBTest2/OleDbTest2.csproj b/CSharpBible/DB/OLEDBTest2/OleDbTest2.csproj
index f8853fcf8..b3b3497fb 100644
--- a/CSharpBible/DB/OLEDBTest2/OleDbTest2.csproj
+++ b/CSharpBible/DB/OLEDBTest2/OleDbTest2.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/CSharpBible/Data/DataAnalysis/DataAnalysis.Core.Tests/DataAnalysis.Core.Tests.csproj b/CSharpBible/Data/DataAnalysis/DataAnalysis.Core.Tests/DataAnalysis.Core.Tests.csproj
index ddd4f0052..d26d35186 100644
--- a/CSharpBible/Data/DataAnalysis/DataAnalysis.Core.Tests/DataAnalysis.Core.Tests.csproj
+++ b/CSharpBible/Data/DataAnalysis/DataAnalysis.Core.Tests/DataAnalysis.Core.Tests.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/CSharpBible/Data/DataAnalysis/DataAnalysis.WPF/DataAnalysis.WPF.csproj b/CSharpBible/Data/DataAnalysis/DataAnalysis.WPF/DataAnalysis.WPF.csproj
index 0de7cdc43..7a6953369 100644
--- a/CSharpBible/Data/DataAnalysis/DataAnalysis.WPF/DataAnalysis.WPF.csproj
+++ b/CSharpBible/Data/DataAnalysis/DataAnalysis.WPF/DataAnalysis.WPF.csproj
@@ -17,9 +17,9 @@
-
-
-
+
+
+
diff --git a/CSharpBible/Data/DataAnalysis/DataConvert.Console/DataConvert.Console.csproj b/CSharpBible/Data/DataAnalysis/DataConvert.Console/DataConvert.Console.csproj
index af2ec5d8f..978d08732 100644
--- a/CSharpBible/Data/DataAnalysis/DataConvert.Console/DataConvert.Console.csproj
+++ b/CSharpBible/Data/DataAnalysis/DataConvert.Console/DataConvert.Console.csproj
@@ -12,7 +12,7 @@
-
+
diff --git a/CSharpBible/Data/PictureDB/PictureDB.Base/PictureDB.Base.csproj b/CSharpBible/Data/PictureDB/PictureDB.Base/PictureDB.Base.csproj
index d10bb726c..3b425b7b5 100644
--- a/CSharpBible/Data/PictureDB/PictureDB.Base/PictureDB.Base.csproj
+++ b/CSharpBible/Data/PictureDB/PictureDB.Base/PictureDB.Base.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/CSharpBible/Data/PictureDB/PictureDB.UI/PictureDB.UI.csproj b/CSharpBible/Data/PictureDB/PictureDB.UI/PictureDB.UI.csproj
index 4e84ce806..2a4206e4b 100644
--- a/CSharpBible/Data/PictureDB/PictureDB.UI/PictureDB.UI.csproj
+++ b/CSharpBible/Data/PictureDB/PictureDB.UI/PictureDB.UI.csproj
@@ -8,10 +8,10 @@
-
-
-
-
+
+
+
+
diff --git a/CSharpBible/Data/RepoMigrator/RepoMigrator.App.Wpf/RepoMigrator.App.Wpf.csproj b/CSharpBible/Data/RepoMigrator/RepoMigrator.App.Wpf/RepoMigrator.App.Wpf.csproj
index bc0235d60..2d8f5cb0c 100644
--- a/CSharpBible/Data/RepoMigrator/RepoMigrator.App.Wpf/RepoMigrator.App.Wpf.csproj
+++ b/CSharpBible/Data/RepoMigrator/RepoMigrator.App.Wpf/RepoMigrator.App.Wpf.csproj
@@ -13,7 +13,7 @@
-
-
+
+
diff --git a/CSharpBible/Data/RepoMigrator/RepoMigrator.Core/RepoMigrator.Core.csproj b/CSharpBible/Data/RepoMigrator/RepoMigrator.Core/RepoMigrator.Core.csproj
index 43cef471e..2503a65e5 100644
--- a/CSharpBible/Data/RepoMigrator/RepoMigrator.Core/RepoMigrator.Core.csproj
+++ b/CSharpBible/Data/RepoMigrator/RepoMigrator.Core/RepoMigrator.Core.csproj
@@ -6,6 +6,6 @@
enable
-
+
diff --git a/CSharpBible/Data/RepoMigrator/RepoMigrator.Tests/RepoMigrator.Tests.csproj b/CSharpBible/Data/RepoMigrator/RepoMigrator.Tests/RepoMigrator.Tests.csproj
index b537b0d1b..e1dedea1e 100644
--- a/CSharpBible/Data/RepoMigrator/RepoMigrator.Tests/RepoMigrator.Tests.csproj
+++ b/CSharpBible/Data/RepoMigrator/RepoMigrator.Tests/RepoMigrator.Tests.csproj
@@ -7,8 +7,8 @@
enable
-
-
+
+
diff --git a/CSharpBible/Data/TraceCsv2realCsv/TraceCsv2realCsv.csproj b/CSharpBible/Data/TraceCsv2realCsv/TraceCsv2realCsv.csproj
index bda95742d..f8dff9530 100644
--- a/CSharpBible/Data/TraceCsv2realCsv/TraceCsv2realCsv.csproj
+++ b/CSharpBible/Data/TraceCsv2realCsv/TraceCsv2realCsv.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests.csproj b/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests.csproj
index 8fe426c44..5e7c8b5d6 100644
--- a/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests.csproj
+++ b/CSharpBible/Data/TraceCsv2realCsvTests/TraceCsv2realCsvTests.csproj
@@ -7,9 +7,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/DependencyInjection/CustomerRepositoryTests/CustomerRepositoryTests.csproj b/CSharpBible/DependencyInjection/CustomerRepositoryTests/CustomerRepositoryTests.csproj
index fe18a05e4..b3a111ddf 100644
--- a/CSharpBible/DependencyInjection/CustomerRepositoryTests/CustomerRepositoryTests.csproj
+++ b/CSharpBible/DependencyInjection/CustomerRepositoryTests/CustomerRepositoryTests.csproj
@@ -11,12 +11,12 @@
-
+
-
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -24,7 +24,7 @@
-
+
diff --git a/CSharpBible/Games/Asteroids/Asteroids_net.csproj b/CSharpBible/Games/Asteroids/Asteroids_net.csproj
index 1d6147ff2..373fabcf2 100644
--- a/CSharpBible/Games/Asteroids/Asteroids_net.csproj
+++ b/CSharpBible/Games/Asteroids/Asteroids_net.csproj
@@ -24,4 +24,7 @@
+
+
+
diff --git a/CSharpBible/Games/AsteroidsModernEngine.Tests/AsteroidsModernEngine.Tests.csproj b/CSharpBible/Games/AsteroidsModernEngine.Tests/AsteroidsModernEngine.Tests.csproj
index c46503e65..4cd9f96aa 100644
--- a/CSharpBible/Games/AsteroidsModernEngine.Tests/AsteroidsModernEngine.Tests.csproj
+++ b/CSharpBible/Games/AsteroidsModernEngine.Tests/AsteroidsModernEngine.Tests.csproj
@@ -30,4 +30,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/CSharpBible/Games/AsteroidsModernEngine/AsteroidsModernEngine.csproj b/CSharpBible/Games/AsteroidsModernEngine/AsteroidsModernEngine.csproj
index e009d0ca1..9794b1f17 100644
--- a/CSharpBible/Games/AsteroidsModernEngine/AsteroidsModernEngine.csproj
+++ b/CSharpBible/Games/AsteroidsModernEngine/AsteroidsModernEngine.csproj
@@ -23,4 +23,8 @@
+
+
+
+
diff --git a/CSharpBible/Games/AsteroidsModernUI/AsteroidsModernUI.csproj b/CSharpBible/Games/AsteroidsModernUI/AsteroidsModernUI.csproj
index 657f20ed1..0e04f0b85 100644
--- a/CSharpBible/Games/AsteroidsModernUI/AsteroidsModernUI.csproj
+++ b/CSharpBible/Games/AsteroidsModernUI/AsteroidsModernUI.csproj
@@ -25,4 +25,11 @@
+
+
+
+
+
+
+
diff --git a/CSharpBible/Games/BoxFlight/BoxFlight.csproj b/CSharpBible/Games/BoxFlight/BoxFlight.csproj
index 005d18383..a9f1db40f 100644
--- a/CSharpBible/Games/BoxFlight/BoxFlight.csproj
+++ b/CSharpBible/Games/BoxFlight/BoxFlight.csproj
@@ -9,6 +9,10 @@
-
+
+
+
+
+
\ No newline at end of file
diff --git a/CSharpBible/Games/CreateCards/CreateCards.csproj b/CSharpBible/Games/CreateCards/CreateCards.csproj
index a0742e83f..b7fa7a8c0 100644
--- a/CSharpBible/Games/CreateCards/CreateCards.csproj
+++ b/CSharpBible/Games/CreateCards/CreateCards.csproj
@@ -15,5 +15,8 @@
+
+
+
diff --git a/CSharpBible/Games/CreateCards/Model/Card.cs b/CSharpBible/Games/CreateCards/Model/Card.cs
index 7ba76979b..d70a7a245 100644
--- a/CSharpBible/Games/CreateCards/Model/Card.cs
+++ b/CSharpBible/Games/CreateCards/Model/Card.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using System.Drawing.Drawing2D;
using System.Drawing;
@@ -11,6 +12,23 @@ public enum CardValues
public class Card
{
+ // Helper methods for color manipulation (replacing ControlPaint)
+ private static Color DarkenColor(Color color, float factor)
+ {
+ int r = (int)(color.R * (1 - factor));
+ int g = (int)(color.G * (1 - factor));
+ int b = (int)(color.B * (1 - factor));
+ return Color.FromArgb(color.A, System.Math.Max(0, r), System.Math.Max(0, g), System.Math.Max(0, b));
+ }
+
+ private static Color LightenColor(Color color, float factor)
+ {
+ int r = (int)(color.R + (255 - color.R) * factor);
+ int g = (int)(color.G + (255 - color.G) * factor);
+ int b = (int)(color.B + (255 - color.B) * factor);
+ return Color.FromArgb(color.A, System.Math.Min(255, r), System.Math.Min(255, g), System.Math.Min(255, b));
+ }
+
public static Dictionary DrawDef = new() {
{ CardValues.Ace ,new("A",0.8){
PntSuits=new[]{new PointF(0.5f,0.5f) } } },
@@ -118,264 +136,1321 @@ void DrawText(Rectangle rect, string sP, double fSize, PointF fpOffs, Graphics g
private static void DrawJack(Graphics g, Rectangle rect, Color color, string suit)
{
- // Simple stylized Jack vector drawing
- RectangleF inner = RectangleF.Inflate(rect, -rect.Width * 0.15f, -rect.Height * 0.2f);
- using var bodyBrush = new SolidBrush(Color.FromArgb(220, color));
- using var outlinePen = new Pen(Color.Black, rect.Width / 150f);
- using var faceBrush = new SolidBrush(Color.Beige);
-
- // Body
- RectangleF body = new RectangleF(inner.X + inner.Width * 0.25f, inner.Y + inner.Height * 0.35f,
- inner.Width * 0.5f, inner.Height * 0.5f);
- g.FillRectangle(bodyBrush, body);
- g.DrawRectangle(outlinePen, body.X, body.Y, body.Width, body.Height);
-
- // Sword (left side)
- float swordW = inner.Width * 0.06f;
- float swordH = inner.Height * 0.7f;
- float swordX = inner.X + inner.Width * 0.15f;
- float swordY = inner.Bottom - swordH * 0.8f;
-
- using var metalBrush = new SolidBrush(Color.Silver);
- // Blade
- g.FillRectangle(metalBrush, swordX, swordY, swordW, swordH);
- g.DrawRectangle(outlinePen, swordX, swordY, swordW, swordH);
- // Guard
- g.FillRectangle(metalBrush, swordX - swordW * 1.5f, swordY + swordH * 0.7f, swordW * 4, swordW);
- g.DrawRectangle(outlinePen, swordX - swordW * 1.5f, swordY + swordH * 0.7f, swordW * 4, swordW);
-
- // Head
- float headRadius = inner.Width * 0.18f;
- PointF headCenter = new PointF(inner.X + inner.Width * 0.5f, inner.Y + inner.Height * 0.22f);
- RectangleF head = new RectangleF(headCenter.X - headRadius, headCenter.Y - headRadius,
- headRadius * 2, headRadius * 2);
- g.FillEllipse(faceBrush, head);
- g.DrawEllipse(outlinePen, head);
-
- // Eyes
- float eyeSize = headRadius * 0.2f;
- using var eyeBrush = new SolidBrush(Color.Black);
- g.FillEllipse(eyeBrush, headCenter.X - headRadius * 0.4f, headCenter.Y - headRadius * 0.2f, eyeSize, eyeSize);
- g.FillEllipse(eyeBrush, headCenter.X + headRadius * 0.4f - eyeSize, headCenter.Y - headRadius * 0.2f, eyeSize, eyeSize);
-
- // Cap
- RectangleF cap = new RectangleF(head.X - headRadius * 0.3f, head.Y - headRadius * 0.6f,
- head.Width * 1.3f, head.Height * 0.6f);
- using var capBrush = new SolidBrush(color);
- g.FillRectangle(capBrush, cap);
- g.DrawRectangle(outlinePen, cap.X, cap.Y, cap.Width, cap.Height);
-
- // Feather
- PointF f1 = new PointF(cap.Right, cap.Bottom);
- PointF f2 = new PointF(cap.Right + cap.Width * 0.3f, cap.Top - cap.Height * 0.5f);
- PointF f3 = new PointF(cap.Right - cap.Width * 0.1f, cap.Top);
- g.FillPolygon(capBrush, new[] { f1, f2, f3 });
- g.DrawPolygon(outlinePen, new[] { f1, f2, f3 });
-
- // Shield (right side)
- float shieldW = inner.Width * 0.35f;
- float shieldH = inner.Height * 0.4f;
- float shieldX = inner.Right - shieldW * 0.9f;
- float shieldY = inner.Bottom - shieldH;
-
- PointF s1 = new PointF(shieldX, shieldY);
- PointF s2 = new PointF(shieldX + shieldW, shieldY);
- PointF s3 = new PointF(shieldX + shieldW, shieldY + shieldH * 0.6f);
- PointF s4 = new PointF(shieldX + shieldW * 0.5f, shieldY + shieldH);
- PointF s5 = new PointF(shieldX, shieldY + shieldH * 0.6f);
- PointF[] shieldPts = { s1, s2, s3, s4, s5 };
-
- using var shieldBrush = new SolidBrush(Color.WhiteSmoke);
- g.FillPolygon(shieldBrush, shieldPts);
- g.DrawPolygon(outlinePen, shieldPts);
-
- // Suit on Shield
- using var suitFont = new Font("Arial", shieldW * 0.6f, FontStyle.Bold);
+ // French-style Jack (Valet) - elaborate mirrored double-headed design
+ float penW = System.Math.Max(1f, rect.Width / 120f);
+ using var outlinePen = new Pen(Color.FromArgb(50, 30, 15), penW);
+ using var thinPen = new Pen(Color.FromArgb(50, 30, 15), penW * 0.5f);
+ using var shadowPen = new Pen(Color.FromArgb(80, 0, 0, 0), penW * 0.4f);
+
+ // Colors - rich palette
+ Color cream = Color.FromArgb(255, 252, 245);
+ Color gold = Color.FromArgb(212, 175, 55);
+ Color darkGold = Color.FromArgb(170, 135, 30);
+ Color lightGold = Color.FromArgb(255, 223, 120);
+ Color skinTone = Color.FromArgb(255, 220, 185);
+ Color skinShadow = Color.FromArgb(235, 190, 150);
+ Color hairColor = Color.FromArgb(120, 75, 35);
+ Color hairHighlight = Color.FromArgb(160, 110, 60);
+
+ // Draw decorative frame with gradient effect
+ RectangleF frameRect = new RectangleF(rect.X + rect.Width * 0.10f, rect.Y + rect.Height * 0.06f,
+ rect.Width * 0.80f, rect.Height * 0.88f);
+
+ // Ornate frame background with subtle pattern
+ using var frameBrush = new LinearGradientBrush(frameRect, cream, Color.FromArgb(250, 245, 235), 45f);
+ g.FillRectangle(frameBrush, frameRect);
+
+ // Draw diagonal pattern in frame
+ using var patternPen = new Pen(Color.FromArgb(15, color), penW * 0.3f);
+ for (float i = frameRect.X; i < frameRect.Right + frameRect.Height; i += rect.Width * 0.04f)
+ {
+ g.DrawLine(patternPen, i, frameRect.Y, i - frameRect.Height * 0.3f, frameRect.Y + frameRect.Height * 0.3f);
+ }
+
+ // Inner decorative border - double line with gold
+ float borderInset = rect.Width * 0.02f;
+ RectangleF innerFrame = RectangleF.Inflate(frameRect, -borderInset * 2, -borderInset * 2);
+ using var borderPen = new Pen(color, penW * 1.2f);
+ using var goldBorderPen = new Pen(gold, penW * 0.6f);
+ g.DrawRectangle(borderPen, innerFrame.X, innerFrame.Y, innerFrame.Width, innerFrame.Height);
+ g.DrawRectangle(goldBorderPen, innerFrame.X - penW, innerFrame.Y - penW, innerFrame.Width + penW * 2, innerFrame.Height + penW * 2);
+
+ // Corner ornaments
+ DrawCornerOrnament(g, innerFrame.X, innerFrame.Y, rect.Width * 0.08f, gold, outlinePen, false, false);
+ DrawCornerOrnament(g, innerFrame.Right, innerFrame.Y, rect.Width * 0.08f, gold, outlinePen, true, false);
+ DrawCornerOrnament(g, innerFrame.X, innerFrame.Bottom, rect.Width * 0.08f, gold, outlinePen, false, true);
+ DrawCornerOrnament(g, innerFrame.Right, innerFrame.Bottom, rect.Width * 0.08f, gold, outlinePen, true, true);
+
+ // Draw upper half figure
+ DrawJackHalf(g, innerFrame, color, suit, false, outlinePen, thinPen, shadowPen,
+ skinTone, skinShadow, hairColor, hairHighlight, gold, darkGold, lightGold);
+
+ // Draw lower half figure (mirrored)
+ DrawJackHalf(g, innerFrame, color, suit, true, outlinePen, thinPen, shadowPen,
+ skinTone, skinShadow, hairColor, hairHighlight, gold, darkGold, lightGold);
+
+ // Center medallion with suit symbol
+ float centerY = innerFrame.Y + innerFrame.Height / 2;
+ float medalSize = innerFrame.Width * 0.22f;
+ RectangleF medalRect = new RectangleF(innerFrame.X + innerFrame.Width / 2 - medalSize / 2,
+ centerY - medalSize / 2, medalSize, medalSize);
+
+ // Medallion with gradient
+ using var medalGradient = new LinearGradientBrush(medalRect, Color.White, Color.FromArgb(240, 235, 220), 135f);
+ g.FillEllipse(medalGradient, medalRect);
+ using var medalBorderPen = new Pen(gold, penW * 1.5f);
+ g.DrawEllipse(medalBorderPen, medalRect);
+ g.DrawEllipse(outlinePen, RectangleF.Inflate(medalRect, penW, penW));
+
+ // Suit symbol in center
+ using var suitFont = new Font("Segoe UI Symbol", medalSize * 0.5f, FontStyle.Bold);
using var suitBrush = new SolidBrush(color);
StringFormat sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
- RectangleF suitRect = new RectangleF(shieldX, shieldY, shieldW, shieldH * 0.8f);
- g.DrawString(suit, suitFont, suitBrush, suitRect, sf);
+ g.DrawString(suit, suitFont, suitBrush, medalRect, sf);
+ }
+
+ private static void DrawCornerOrnament(Graphics g, float x, float y, float size, Color gold, Pen outlinePen, bool flipH, bool flipV)
+ {
+ var state = g.Save();
+ g.TranslateTransform(x, y);
+ if (flipH) g.ScaleTransform(-1, 1);
+ if (flipV) g.ScaleTransform(1, -1);
+
+ using var goldBrush = new SolidBrush(gold);
+ // Fleur-de-lis style corner
+ PointF[] ornament = {
+ new PointF(0, 0),
+ new PointF(size * 0.3f, 0),
+ new PointF(size * 0.15f, size * 0.15f),
+ new PointF(size * 0.4f, size * 0.1f),
+ new PointF(size * 0.2f, size * 0.3f),
+ new PointF(size * 0.1f, size * 0.4f),
+ new PointF(size * 0.15f, size * 0.15f),
+ new PointF(0, size * 0.3f)
+ };
+ g.FillPolygon(goldBrush, ornament);
+ g.DrawPolygon(outlinePen, ornament);
+
+ g.Restore(state);
+ }
+
+ private static void DrawJackHalf(Graphics g, RectangleF rect, Color color, string suit, bool mirrored,
+ Pen outlinePen, Pen thinPen, Pen shadowPen, Color skinTone, Color skinShadow,
+ Color hairColor, Color hairHighlight, Color gold, Color darkGold, Color lightGold)
+ {
+ var state = g.Save();
+
+ if (mirrored)
+ {
+ g.TranslateTransform(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
+ g.RotateTransform(180);
+ g.TranslateTransform(-(rect.X + rect.Width / 2), -(rect.Y + rect.Height / 2));
+ }
+
+ float halfH = rect.Height * 0.47f;
+ RectangleF half = new RectangleF(rect.X, rect.Y, rect.Width, halfH);
+
+ // Shadow layer for depth
+ using var shadowBrush = new SolidBrush(Color.FromArgb(30, 0, 0, 0));
+
+ // Tunic with gradient and folds
+ RectangleF tunicRect = new RectangleF(half.X + half.Width * 0.18f, half.Y + half.Height * 0.4f,
+ half.Width * 0.64f, half.Height * 0.6f);
+ using var tunicGradient = new LinearGradientBrush(tunicRect,
+ Color.FromArgb(255, color), Color.FromArgb(200, DarkenColor(color, 0.2f)), 0f);
+
+ PointF[] tunic = {
+ new PointF(half.X + half.Width * 0.22f, half.Bottom),
+ new PointF(half.X + half.Width * 0.18f, half.Y + half.Height * 0.52f),
+ new PointF(half.X + half.Width * 0.28f, half.Y + half.Height * 0.46f),
+ new PointF(half.X + half.Width * 0.5f, half.Y + half.Height * 0.42f),
+ new PointF(half.X + half.Width * 0.72f, half.Y + half.Height * 0.46f),
+ new PointF(half.X + half.Width * 0.82f, half.Y + half.Height * 0.52f),
+ new PointF(half.X + half.Width * 0.78f, half.Bottom)
+ };
+ g.FillPolygon(tunicGradient, tunic);
+ g.DrawPolygon(outlinePen, tunic);
+
+ // Tunic folds/creases for texture
+ using var foldPen = new Pen(Color.FromArgb(60, 0, 0, 0), thinPen.Width);
+ using var highlightPen = new Pen(Color.FromArgb(80, 255, 255, 255), thinPen.Width);
+ g.DrawLine(foldPen, half.X + half.Width * 0.35f, half.Y + half.Height * 0.55f,
+ half.X + half.Width * 0.32f, half.Bottom);
+ g.DrawLine(highlightPen, half.X + half.Width * 0.37f, half.Y + half.Height * 0.55f,
+ half.X + half.Width * 0.35f, half.Bottom);
+ g.DrawLine(foldPen, half.X + half.Width * 0.65f, half.Y + half.Height * 0.55f,
+ half.X + half.Width * 0.68f, half.Bottom);
+
+ // Decorative trim on tunic
+ using var trimPen = new Pen(gold, outlinePen.Width * 1.2f);
+ g.DrawLine(trimPen, half.X + half.Width * 0.5f, half.Y + half.Height * 0.45f,
+ half.X + half.Width * 0.5f, half.Bottom);
+
+ // Elaborate collar with lace detail
+ using var collarBrush = new SolidBrush(Color.White);
+ PointF[] collar = {
+ new PointF(half.X + half.Width * 0.35f, half.Y + half.Height * 0.46f),
+ new PointF(half.X + half.Width * 0.42f, half.Y + half.Height * 0.52f),
+ new PointF(half.X + half.Width * 0.5f, half.Y + half.Height * 0.55f),
+ new PointF(half.X + half.Width * 0.58f, half.Y + half.Height * 0.52f),
+ new PointF(half.X + half.Width * 0.65f, half.Y + half.Height * 0.46f),
+ new PointF(half.X + half.Width * 0.5f, half.Y + half.Height * 0.42f)
+ };
+ g.FillPolygon(collarBrush, collar);
+ g.DrawPolygon(thinPen, collar);
+
+ // Lace pattern on collar
+ using var lacePen = new Pen(Color.FromArgb(100, 150, 150, 150), thinPen.Width * 0.5f);
+ for (float lx = half.X + half.Width * 0.4f; lx < half.X + half.Width * 0.6f; lx += half.Width * 0.03f)
+ {
+ g.DrawLine(lacePen, lx, half.Y + half.Height * 0.48f, lx + half.Width * 0.015f, half.Y + half.Height * 0.52f);
+ }
+
+ // Head with shading
+ float headW = half.Width * 0.24f;
+ float headH = half.Height * 0.34f;
+ RectangleF headRect = new RectangleF(half.X + half.Width * 0.5f - headW / 2,
+ half.Y + half.Height * 0.10f, headW, headH);
+
+ // Hair with texture
+ using var hairGradient = new LinearGradientBrush(
+ new RectangleF(headRect.X - headW * 0.15f, headRect.Y - headH * 0.1f, headW * 1.3f, headH * 0.6f),
+ hairHighlight, hairColor, 45f);
+ RectangleF hairRect = new RectangleF(headRect.X - headW * 0.12f, headRect.Y - headH * 0.08f,
+ headW * 1.24f, headH * 0.55f);
+ g.FillEllipse(hairGradient, hairRect);
+
+ // Hair strands
+ using var strandPen = new Pen(Color.FromArgb(80, 60, 40, 20), thinPen.Width * 0.6f);
+ for (int i = 0; i < 5; i++)
+ {
+ float sx = headRect.X + headW * (0.1f + i * 0.2f);
+ g.DrawBezier(strandPen,
+ new PointF(sx, headRect.Y),
+ new PointF(sx - headW * 0.05f, headRect.Y + headH * 0.1f),
+ new PointF(sx + headW * 0.05f, headRect.Y + headH * 0.2f),
+ new PointF(sx, headRect.Y + headH * 0.3f));
+ }
+
+ // Face with gradient for 3D effect
+ using var faceGradient = new LinearGradientBrush(headRect, skinTone, skinShadow, 120f);
+ g.FillEllipse(faceGradient, headRect);
+ g.DrawEllipse(outlinePen, headRect);
+
+ // Cheek blush
+ using var blushBrush = new SolidBrush(Color.FromArgb(40, 255, 150, 150));
+ g.FillEllipse(blushBrush, headRect.X + headW * 0.6f, headRect.Y + headH * 0.45f, headW * 0.25f, headH * 0.15f);
+
+ // Elaborate beret/cap with feather
+ RectangleF capRect = new RectangleF(headRect.X - headW * 0.2f, headRect.Y - headH * 0.35f, headW * 1.6f, headH * 0.6f);
+ using var capGradient = new LinearGradientBrush(capRect,
+ LightenColor(color, 0.2f), color, 90f);
+ PointF[] cap = {
+ new PointF(headRect.X - headW * 0.18f, headRect.Y + headH * 0.18f),
+ new PointF(headRect.X + headW * 0.1f, headRect.Y - headH * 0.15f),
+ new PointF(headRect.X + headW * 0.5f, headRect.Y - headH * 0.28f),
+ new PointF(headRect.Right + headW * 0.35f, headRect.Y - headH * 0.12f),
+ new PointF(headRect.Right + headW * 0.2f, headRect.Y + headH * 0.22f)
+ };
+ g.FillPolygon(capGradient, cap);
+ g.DrawPolygon(outlinePen, cap);
+
+ // Cap band
+ using var bandBrush = new SolidBrush(gold);
+ g.FillRectangle(bandBrush, headRect.X - headW * 0.1f, headRect.Y + headH * 0.08f, headW * 1.2f, headH * 0.08f);
+
+ // Jewel on cap
+ using var jewelBrush = new SolidBrush(Color.FromArgb(220, 20, 60));
+ float jewelSize = headW * 0.12f;
+ g.FillEllipse(jewelBrush, headRect.X + headW * 0.4f, headRect.Y + headH * 0.02f, jewelSize, jewelSize);
+ g.DrawEllipse(thinPen, headRect.X + headW * 0.4f, headRect.Y + headH * 0.02f, jewelSize, jewelSize);
+
+ // Elaborate feather with multiple strands
+ using var featherGradient = new LinearGradientBrush(
+ new RectangleF(headRect.Right, headRect.Y - headH * 0.7f, headW * 0.8f, headH * 0.8f),
+ lightGold, gold, 45f);
+ using var featherPen = new Pen(featherGradient, outlinePen.Width * 2f);
+
+ // Main feather curve
+ g.DrawBezier(featherPen,
+ new PointF(headRect.Right + headW * 0.25f, headRect.Y - headH * 0.05f),
+ new PointF(headRect.Right + headW * 0.6f, headRect.Y - headH * 0.35f),
+ new PointF(headRect.Right + headW * 0.5f, headRect.Y - headH * 0.55f),
+ new PointF(headRect.Right + headW * 0.15f, headRect.Y - headH * 0.45f));
+
+ // Feather barbs
+ using var barbPen = new Pen(gold, thinPen.Width * 0.8f);
+ for (int i = 0; i < 6; i++)
+ {
+ float t = i / 6f;
+ float bx = headRect.Right + headW * (0.25f + t * 0.25f);
+ float by = headRect.Y - headH * (0.05f + t * 0.35f);
+ g.DrawLine(barbPen, bx, by, bx + headW * 0.15f, by - headH * 0.08f);
+ g.DrawLine(barbPen, bx, by, bx - headW * 0.1f, by - headH * 0.12f);
+ }
+
+ // Eyes - two symmetric eyes (front view like Queen and King)
+ float eyeW = headW * 0.12f;
+ float eyeH = headH * 0.07f;
+ float eyeY = headRect.Y + headH * 0.36f;
+
+ // Left eye
+ float leftEyeX = headRect.X + headW * 0.22f;
+ DrawJackEye(g, leftEyeX, eyeY, eyeW, eyeH, thinPen);
+
+ // Right eye
+ float rightEyeX = headRect.X + headW * 0.66f;
+ DrawJackEye(g, rightEyeX, eyeY, eyeW, eyeH, thinPen);
+
+ // Eyebrows
+ using var browPen = new Pen(hairColor, thinPen.Width * 1.2f);
+ g.DrawArc(browPen, leftEyeX - eyeW * 0.1f, eyeY - eyeH * 1.0f, eyeW * 1.2f, eyeH, 200, 70);
+ g.DrawArc(browPen, rightEyeX - eyeW * 0.1f, eyeY - eyeH * 1.0f, eyeW * 1.2f, eyeH, 250, 70);
+
+ // Nose (centered)
+ g.DrawBezier(thinPen,
+ new PointF(headRect.X + headW * 0.48f, headRect.Y + headH * 0.4f),
+ new PointF(headRect.X + headW * 0.5f, headRect.Y + headH * 0.48f),
+ new PointF(headRect.X + headW * 0.52f, headRect.Y + headH * 0.54f),
+ new PointF(headRect.X + headW * 0.5f, headRect.Y + headH * 0.56f));
+
+ // Mouth (centered)
+ using var lipPen = new Pen(Color.FromArgb(180, 100, 90), thinPen.Width);
+ g.DrawArc(lipPen, headRect.X + headW * 0.4f, headRect.Y + headH * 0.62f, headW * 0.2f, headH * 0.1f, 0, 180);
+
+ // Halberd with detailed blade
+ float shaftX = half.X + half.Width * 0.10f;
+
+ // Shaft with wood grain
+ RectangleF shaftRect = new RectangleF(shaftX, half.Y + half.Height * 0.08f, half.Width * 0.028f, half.Height * 0.88f);
+ using var shaftGradient = new LinearGradientBrush(shaftRect,
+ Color.FromArgb(160, 110, 60), Color.FromArgb(100, 65, 30), 0f);
+ g.FillRectangle(shaftGradient, shaftRect);
+ g.DrawRectangle(outlinePen, shaftRect.X, shaftRect.Y, shaftRect.Width, shaftRect.Height);
+
+ // Wood grain lines
+ using var grainPen = new Pen(Color.FromArgb(50, 60, 40, 20), thinPen.Width * 0.3f);
+ for (float gy = shaftRect.Y; gy < shaftRect.Bottom; gy += half.Height * 0.05f)
+ {
+ g.DrawLine(grainPen, shaftRect.X + shaftRect.Width * 0.2f, gy,
+ shaftRect.X + shaftRect.Width * 0.8f, gy + half.Height * 0.02f);
+ }
+
+ // Elaborate blade with engraving
+ using var bladeGradient = new LinearGradientBrush(
+ new RectangleF(shaftX, half.Y, half.Width * 0.15f, half.Height * 0.3f),
+ Color.FromArgb(220, 220, 230), Color.FromArgb(160, 165, 175), 90f);
+ PointF[] blade = {
+ new PointF(shaftX + half.Width * 0.028f, half.Y + half.Height * 0.12f),
+ new PointF(shaftX + half.Width * 0.08f, half.Y + half.Height * 0.04f),
+ new PointF(shaftX + half.Width * 0.14f, half.Y + half.Height * 0.06f),
+ new PointF(shaftX + half.Width * 0.12f, half.Y + half.Height * 0.18f),
+ new PointF(shaftX + half.Width * 0.08f, half.Y + half.Height * 0.28f),
+ new PointF(shaftX + half.Width * 0.028f, half.Y + half.Height * 0.24f)
+ };
+ g.FillPolygon(bladeGradient, blade);
+ g.DrawPolygon(outlinePen, blade);
+
+ // Blade edge highlight
+ using var edgePen = new Pen(Color.FromArgb(150, 255, 255, 255), thinPen.Width * 0.5f);
+ g.DrawLine(edgePen, blade[1], blade[2]);
+
+ // Axe spike
+ PointF[] spike = {
+ new PointF(shaftX + half.Width * 0.014f, half.Y + half.Height * 0.08f),
+ new PointF(shaftX + half.Width * 0.014f, half.Y),
+ new PointF(shaftX + half.Width * 0.028f, half.Y + half.Height * 0.08f)
+ };
+ g.FillPolygon(bladeGradient, spike);
+ g.DrawPolygon(outlinePen, spike);
+
+ g.Restore(state);
}
private static void DrawQueen(Graphics g, Rectangle rect, Color color, string suit)
{
- // Simple stylized Queen vector drawing
- RectangleF inner = RectangleF.Inflate(rect, -rect.Width * 0.15f, -rect.Height * 0.2f);
- using var bodyBrush = new SolidBrush(Color.FromArgb(200, color));
- using var outlinePen = new Pen(Color.Black, rect.Width / 150f);
- using var faceBrush = new SolidBrush(Color.Beige);
-
- // Dress (triangle)
- PointF p1 = new PointF(inner.X + inner.Width * 0.5f, inner.Bottom);
- PointF p2 = new PointF(inner.X + inner.Width * 0.2f, inner.Y + inner.Height * 0.45f);
- PointF p3 = new PointF(inner.X + inner.Width * 0.8f, inner.Y + inner.Height * 0.45f);
- PointF[] dress = { p1, p2, p3 };
- g.FillPolygon(bodyBrush, dress);
- g.DrawPolygon(outlinePen, dress);
-
- // Upper body
- RectangleF body = new RectangleF(inner.X + inner.Width * 0.35f, inner.Y + inner.Height * 0.32f,
- inner.Width * 0.3f, inner.Height * 0.2f);
- g.FillRectangle(bodyBrush, body);
- g.DrawRectangle(outlinePen, body.X, body.Y, body.Width, body.Height);
-
- // Hair
- float headRadius = inner.Width * 0.17f;
- PointF headCenter = new PointF(inner.X + inner.Width * 0.5f, inner.Y + inner.Height * 0.18f);
- RectangleF hairRect = new RectangleF(headCenter.X - headRadius * 1.2f, headCenter.Y - headRadius * 1.2f,
- headRadius * 2.4f, headRadius * 2.4f);
- using var hairBrush = new SolidBrush(Color.Gold);
- g.FillEllipse(hairBrush, hairRect);
- g.DrawEllipse(outlinePen, hairRect);
-
- // Head
- RectangleF head = new RectangleF(headCenter.X - headRadius, headCenter.Y - headRadius,
- headRadius * 2, headRadius * 2);
- g.FillEllipse(faceBrush, head);
- g.DrawEllipse(outlinePen, head);
-
- // Eyes
- float eyeSize = headRadius * 0.2f;
- using var eyeBrush = new SolidBrush(Color.Black);
- g.FillEllipse(eyeBrush, headCenter.X - headRadius * 0.35f, headCenter.Y - headRadius * 0.1f, eyeSize, eyeSize);
- g.FillEllipse(eyeBrush, headCenter.X + headRadius * 0.35f - eyeSize, headCenter.Y - headRadius * 0.1f, eyeSize, eyeSize);
-
- // Crown
- float crownHeight = headRadius * 0.8f;
- PointF c1 = new PointF(head.X, head.Y);
- PointF c2 = new PointF(head.Right, head.Y);
- PointF c3 = new PointF(head.X + head.Width * 0.2f, head.Y - crownHeight);
- PointF c4 = new PointF(head.X + head.Width * 0.5f, head.Y - crownHeight * 1.2f);
- PointF c5 = new PointF(head.X + head.Width * 0.8f, head.Y - crownHeight);
- PointF[] crown = { c1, c3, c4, c5, c2 };
- using var crownBrush = new SolidBrush(color);
- g.FillPolygon(crownBrush, crown);
+ // French-style Queen (Dame) - elaborate mirrored double-headed design
+ float penW = System.Math.Max(1f, rect.Width / 120f);
+ using var outlinePen = new Pen(Color.FromArgb(50, 30, 15), penW);
+ using var thinPen = new Pen(Color.FromArgb(50, 30, 15), penW * 0.5f);
+
+ // Colors - elegant palette
+ Color cream = Color.FromArgb(255, 252, 245);
+ Color gold = Color.FromArgb(212, 175, 55);
+ Color lightGold = Color.FromArgb(255, 223, 120);
+ Color skinTone = Color.FromArgb(255, 225, 200);
+ Color skinShadow = Color.FromArgb(240, 200, 175);
+ Color hairColor = Color.FromArgb(180, 140, 60);
+ Color hairHighlight = Color.FromArgb(220, 190, 100);
+
+ // Draw decorative frame with gradient
+ RectangleF frameRect = new RectangleF(rect.X + rect.Width * 0.10f, rect.Y + rect.Height * 0.06f,
+ rect.Width * 0.80f, rect.Height * 0.88f);
+ using var frameBrush = new LinearGradientBrush(frameRect, cream, Color.FromArgb(250, 245, 235), 45f);
+ g.FillRectangle(frameBrush, frameRect);
+
+ // Elegant floral pattern in background
+ using var patternPen = new Pen(Color.FromArgb(12, color), penW * 0.4f);
+ for (float px = frameRect.X; px < frameRect.Right; px += rect.Width * 0.06f)
+ {
+ for (float py = frameRect.Y; py < frameRect.Bottom; py += rect.Height * 0.05f)
+ {
+ g.DrawEllipse(patternPen, px, py, rect.Width * 0.02f, rect.Width * 0.02f);
+ }
+ }
+
+ // Inner decorative border - double line
+ float borderInset = rect.Width * 0.02f;
+ RectangleF innerFrame = RectangleF.Inflate(frameRect, -borderInset * 2, -borderInset * 2);
+ using var borderPen = new Pen(color, penW * 1.2f);
+ using var goldBorderPen = new Pen(gold, penW * 0.6f);
+ g.DrawRectangle(borderPen, innerFrame.X, innerFrame.Y, innerFrame.Width, innerFrame.Height);
+ g.DrawRectangle(goldBorderPen, innerFrame.X - penW, innerFrame.Y - penW, innerFrame.Width + penW * 2, innerFrame.Height + penW * 2);
+
+ // Floral corner ornaments
+ DrawFloralCorner(g, innerFrame.X, innerFrame.Y, rect.Width * 0.1f, gold, color, outlinePen, false, false);
+ DrawFloralCorner(g, innerFrame.Right, innerFrame.Y, rect.Width * 0.1f, gold, color, outlinePen, true, false);
+ DrawFloralCorner(g, innerFrame.X, innerFrame.Bottom, rect.Width * 0.1f, gold, color, outlinePen, false, true);
+ DrawFloralCorner(g, innerFrame.Right, innerFrame.Bottom, rect.Width * 0.1f, gold, color, outlinePen, true, true);
+
+ // Draw upper half figure
+ DrawQueenHalf(g, innerFrame, color, suit, false, outlinePen, thinPen, skinTone, skinShadow, hairColor, hairHighlight, gold, lightGold);
+
+ // Draw lower half figure (mirrored)
+ DrawQueenHalf(g, innerFrame, color, suit, true, outlinePen, thinPen, skinTone, skinShadow, hairColor, hairHighlight, gold, lightGold);
+
+ // Center medallion with suit symbol
+ float centerY = innerFrame.Y + innerFrame.Height / 2;
+ float medalSize = innerFrame.Width * 0.24f;
+ RectangleF medalRect = new RectangleF(innerFrame.X + innerFrame.Width / 2 - medalSize / 2,
+ centerY - medalSize / 2, medalSize, medalSize);
+
+ // Ornate medallion
+ using var medalGradient = new LinearGradientBrush(medalRect, Color.White, Color.FromArgb(245, 240, 230), 135f);
+ g.FillEllipse(medalGradient, medalRect);
+
+ // Decorative ring around medallion
+ using var ringPen = new Pen(gold, penW * 2f);
+ g.DrawEllipse(ringPen, medalRect);
+ using var innerRingPen = new Pen(color, penW * 0.8f);
+ g.DrawEllipse(innerRingPen, RectangleF.Inflate(medalRect, -penW * 2, -penW * 2));
+
+ // Suit symbol
+ using var suitFont = new Font("Segoe UI Symbol", medalSize * 0.45f, FontStyle.Bold);
+ using var suitBrush = new SolidBrush(color);
+ StringFormat sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
+ g.DrawString(suit, suitFont, suitBrush, medalRect, sf);
+ }
+
+ private static void DrawFloralCorner(Graphics g, float x, float y, float size, Color gold, Color accent, Pen outlinePen, bool flipH, bool flipV)
+ {
+ var state = g.Save();
+ g.TranslateTransform(x, y);
+ if (flipH) g.ScaleTransform(-1, 1);
+ if (flipV) g.ScaleTransform(1, -1);
+
+ using var goldBrush = new SolidBrush(gold);
+ using var accentBrush = new SolidBrush(accent);
+
+ // Main curved vine
+ using var vinePen = new Pen(gold, outlinePen.Width * 1.2f);
+ g.DrawBezier(vinePen,
+ new PointF(0, size * 0.5f),
+ new PointF(size * 0.2f, size * 0.3f),
+ new PointF(size * 0.3f, size * 0.2f),
+ new PointF(size * 0.5f, 0));
+
+ // Small leaves
+ PointF[] leaf1 = {
+ new PointF(size * 0.15f, size * 0.35f),
+ new PointF(size * 0.05f, size * 0.15f),
+ new PointF(size * 0.25f, size * 0.25f)
+ };
+ g.FillPolygon(goldBrush, leaf1);
+
+ PointF[] leaf2 = {
+ new PointF(size * 0.35f, size * 0.15f),
+ new PointF(size * 0.15f, size * 0.05f),
+ new PointF(size * 0.25f, size * 0.25f)
+ };
+ g.FillPolygon(goldBrush, leaf2);
+
+ // Small flower
+ float flowerX = size * 0.08f;
+ float flowerY = size * 0.08f;
+ float petalR = size * 0.06f;
+ g.FillEllipse(accentBrush, flowerX - petalR, flowerY - petalR * 1.5f, petalR * 2, petalR * 2);
+ g.FillEllipse(accentBrush, flowerX - petalR * 1.5f, flowerY - petalR, petalR * 2, petalR * 2);
+ g.FillEllipse(goldBrush, flowerX - petalR * 0.5f, flowerY - petalR * 0.5f, petalR, petalR);
+
+ g.Restore(state);
+ }
+
+ private static void DrawQueenHalf(Graphics g, RectangleF rect, Color color, string suit, bool mirrored,
+ Pen outlinePen, Pen thinPen, Color skinTone, Color skinShadow, Color hairColor, Color hairHighlight, Color gold, Color lightGold)
+ {
+ var state = g.Save();
+
+ if (mirrored)
+ {
+ g.TranslateTransform(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
+ g.RotateTransform(180);
+ g.TranslateTransform(-(rect.X + rect.Width / 2), -(rect.Y + rect.Height / 2));
+ }
+
+ float halfH = rect.Height * 0.47f;
+ RectangleF half = new RectangleF(rect.X, rect.Y, rect.Width, halfH);
+
+ // Elaborate gown with gradient and layers
+ RectangleF gownRect = new RectangleF(half.X + half.Width * 0.12f, half.Y + half.Height * 0.42f,
+ half.Width * 0.76f, half.Height * 0.58f);
+ using var gownGradient = new LinearGradientBrush(gownRect,
+ Color.FromArgb(255, color), Color.FromArgb(200, DarkenColor(color, 0.15f)), 90f);
+
+ // Full gown shape
+ PointF[] gown = {
+ new PointF(half.X + half.Width * 0.12f, half.Bottom),
+ new PointF(half.X + half.Width * 0.15f, half.Y + half.Height * 0.58f),
+ new PointF(half.X + half.Width * 0.22f, half.Y + half.Height * 0.5f),
+ new PointF(half.X + half.Width * 0.32f, half.Y + half.Height * 0.45f),
+ new PointF(half.X + half.Width * 0.5f, half.Y + half.Height * 0.42f),
+ new PointF(half.X + half.Width * 0.68f, half.Y + half.Height * 0.45f),
+ new PointF(half.X + half.Width * 0.78f, half.Y + half.Height * 0.5f),
+ new PointF(half.X + half.Width * 0.85f, half.Y + half.Height * 0.58f),
+ new PointF(half.X + half.Width * 0.88f, half.Bottom)
+ };
+ g.FillPolygon(gownGradient, gown);
+ g.DrawPolygon(outlinePen, gown);
+
+ // Gown folds for depth
+ using var foldPen = new Pen(Color.FromArgb(50, 0, 0, 0), thinPen.Width);
+ using var highlightPen = new Pen(Color.FromArgb(60, 255, 255, 255), thinPen.Width);
+ g.DrawBezier(foldPen,
+ new PointF(half.X + half.Width * 0.3f, half.Y + half.Height * 0.5f),
+ new PointF(half.X + half.Width * 0.28f, half.Y + half.Height * 0.7f),
+ new PointF(half.X + half.Width * 0.25f, half.Y + half.Height * 0.85f),
+ new PointF(half.X + half.Width * 0.22f, half.Bottom));
+ g.DrawBezier(highlightPen,
+ new PointF(half.X + half.Width * 0.32f, half.Y + half.Height * 0.5f),
+ new PointF(half.X + half.Width * 0.3f, half.Y + half.Height * 0.7f),
+ new PointF(half.X + half.Width * 0.28f, half.Y + half.Height * 0.85f),
+ new PointF(half.X + half.Width * 0.26f, half.Bottom));
+ g.DrawBezier(foldPen,
+ new PointF(half.X + half.Width * 0.7f, half.Y + half.Height * 0.5f),
+ new PointF(half.X + half.Width * 0.72f, half.Y + half.Height * 0.7f),
+ new PointF(half.X + half.Width * 0.75f, half.Y + half.Height * 0.85f),
+ new PointF(half.X + half.Width * 0.78f, half.Bottom));
+
+ // Decorative embroidery on gown
+ using var embPen = new Pen(gold, thinPen.Width * 1.2f);
+ // Vertical ornament
+ g.DrawLine(embPen, half.X + half.Width * 0.5f, half.Y + half.Height * 0.5f,
+ half.X + half.Width * 0.5f, half.Bottom);
+ // Small diamonds along the line
+ for (float ey = half.Y + half.Height * 0.55f; ey < half.Bottom - half.Height * 0.1f; ey += half.Height * 0.1f)
+ {
+ PointF[] diamond = {
+ new PointF(half.X + half.Width * 0.5f, ey - half.Height * 0.02f),
+ new PointF(half.X + half.Width * 0.52f, ey),
+ new PointF(half.X + half.Width * 0.5f, ey + half.Height * 0.02f),
+ new PointF(half.X + half.Width * 0.48f, ey)
+ };
+ using var diamondBrush = new SolidBrush(gold);
+ g.FillPolygon(diamondBrush, diamond);
+ }
+
+ // Elaborate neckline with lace
+ using var laceBrush = new SolidBrush(Color.White);
+ PointF[] neckLace = {
+ new PointF(half.X + half.Width * 0.32f, half.Y + half.Height * 0.45f),
+ new PointF(half.X + half.Width * 0.38f, half.Y + half.Height * 0.5f),
+ new PointF(half.X + half.Width * 0.44f, half.Y + half.Height * 0.53f),
+ new PointF(half.X + half.Width * 0.5f, half.Y + half.Height * 0.55f),
+ new PointF(half.X + half.Width * 0.56f, half.Y + half.Height * 0.53f),
+ new PointF(half.X + half.Width * 0.62f, half.Y + half.Height * 0.5f),
+ new PointF(half.X + half.Width * 0.68f, half.Y + half.Height * 0.45f),
+ new PointF(half.X + half.Width * 0.5f, half.Y + half.Height * 0.42f)
+ };
+ g.FillPolygon(laceBrush, neckLace);
+ g.DrawPolygon(thinPen, neckLace);
+
+ // Lace scalloped edge
+ using var scallopPen = new Pen(Color.FromArgb(120, 120, 120), thinPen.Width * 0.6f);
+ for (float sx = half.X + half.Width * 0.36f; sx < half.X + half.Width * 0.64f; sx += half.Width * 0.04f)
+ {
+ g.DrawArc(scallopPen, sx, half.Y + half.Height * 0.51f, half.Width * 0.04f, half.Height * 0.03f, 0, 180);
+ }
+
+ // Necklace with pendant
+ using var necklacePen = new Pen(gold, thinPen.Width * 1.5f);
+ g.DrawArc(necklacePen, half.X + half.Width * 0.38f, half.Y + half.Height * 0.42f,
+ half.Width * 0.24f, half.Height * 0.12f, 0, 180);
+
+ // Pendant
+ using var pendantBrush = new SolidBrush(color);
+ using var goldBrush = new SolidBrush(gold);
+ float pendX = half.X + half.Width * 0.5f;
+ float pendY = half.Y + half.Height * 0.52f;
+ g.FillEllipse(goldBrush, pendX - half.Width * 0.025f, pendY, half.Width * 0.05f, half.Width * 0.05f);
+ g.FillEllipse(pendantBrush, pendX - half.Width * 0.018f, pendY + half.Width * 0.007f,
+ half.Width * 0.036f, half.Width * 0.036f);
+
+ // Elaborate hair with curls
+ float headW = half.Width * 0.22f;
+ float headH = half.Height * 0.3f;
+ RectangleF headRect = new RectangleF(half.X + half.Width * 0.5f - headW / 2,
+ half.Y + half.Height * 0.12f, headW, headH);
+
+ // Hair base with gradient
+ using var hairGradient = new LinearGradientBrush(
+ new RectangleF(headRect.X - headW * 0.3f, headRect.Y - headH * 0.15f, headW * 1.6f, headH * 1.2f),
+ hairHighlight, hairColor, 60f);
+
+ // Main hair volume
+ RectangleF hairOuter = new RectangleF(headRect.X - headW * 0.28f, headRect.Y - headH * 0.12f,
+ headW * 1.56f, headH * 1.15f);
+ g.FillEllipse(hairGradient, hairOuter);
+
+ // Hair curls on sides
+ using var curlPen = new Pen(Color.FromArgb(100, 60, 25), thinPen.Width * 0.8f);
+ // Left curls
+ g.DrawBezier(curlPen,
+ new PointF(headRect.X - headW * 0.15f, headRect.Y + headH * 0.3f),
+ new PointF(headRect.X - headW * 0.3f, headRect.Y + headH * 0.5f),
+ new PointF(headRect.X - headW * 0.25f, headRect.Y + headH * 0.7f),
+ new PointF(headRect.X - headW * 0.1f, headRect.Y + headH * 0.6f));
+ g.DrawBezier(curlPen,
+ new PointF(headRect.X - headW * 0.1f, headRect.Y + headH * 0.5f),
+ new PointF(headRect.X - headW * 0.22f, headRect.Y + headH * 0.65f),
+ new PointF(headRect.X - headW * 0.18f, headRect.Y + headH * 0.8f),
+ new PointF(headRect.X - headW * 0.05f, headRect.Y + headH * 0.75f));
+ // Right curls
+ g.DrawBezier(curlPen,
+ new PointF(headRect.Right + headW * 0.15f, headRect.Y + headH * 0.3f),
+ new PointF(headRect.Right + headW * 0.3f, headRect.Y + headH * 0.5f),
+ new PointF(headRect.Right + headW * 0.25f, headRect.Y + headH * 0.7f),
+ new PointF(headRect.Right + headW * 0.1f, headRect.Y + headH * 0.6f));
+
+ // Face with 3D shading
+ using var faceGradient = new LinearGradientBrush(headRect, skinTone, skinShadow, 130f);
+ g.FillEllipse(faceGradient, headRect);
+ g.DrawEllipse(outlinePen, headRect);
+
+ // Rosy cheeks
+ using var blushBrush = new SolidBrush(Color.FromArgb(35, 255, 130, 130));
+ g.FillEllipse(blushBrush, headRect.X + headW * 0.08f, headRect.Y + headH * 0.45f, headW * 0.22f, headH * 0.15f);
+ g.FillEllipse(blushBrush, headRect.X + headW * 0.7f, headRect.Y + headH * 0.45f, headW * 0.22f, headH * 0.15f);
+
+ // Elegant tiara crown
+ float crownH = headH * 0.45f;
+ float crownW = headW * 1.4f;
+ float crownX = headRect.X - headW * 0.2f;
+ float crownY = headRect.Y - crownH * 0.55f;
+
+ // Crown with gradient
+ using var crownGradient = new LinearGradientBrush(
+ new RectangleF(crownX, crownY, crownW, crownH), lightGold, gold, 90f);
+
+ PointF[] crown = {
+ new PointF(crownX, crownY + crownH),
+ new PointF(crownX + crownW * 0.08f, crownY + crownH * 0.35f),
+ new PointF(crownX + crownW * 0.18f, crownY + crownH * 0.75f),
+ new PointF(crownX + crownW * 0.28f, crownY + crownH * 0.15f),
+ new PointF(crownX + crownW * 0.38f, crownY + crownH * 0.6f),
+ new PointF(crownX + crownW * 0.5f, crownY - crownH * 0.1f),
+ new PointF(crownX + crownW * 0.62f, crownY + crownH * 0.6f),
+ new PointF(crownX + crownW * 0.72f, crownY + crownH * 0.15f),
+ new PointF(crownX + crownW * 0.82f, crownY + crownH * 0.75f),
+ new PointF(crownX + crownW * 0.92f, crownY + crownH * 0.35f),
+ new PointF(crownX + crownW, crownY + crownH)
+ };
+ g.FillPolygon(crownGradient, crown);
g.DrawPolygon(outlinePen, crown);
+
+ // Crown jewels
+ float jewelSize = crownW * 0.065f;
+ using var rubyBrush = new SolidBrush(Color.FromArgb(220, 20, 60));
+ using var sapphireBrush = new SolidBrush(Color.FromArgb(30, 80, 180));
+ using var pearlBrush = new SolidBrush(Color.FromArgb(255, 250, 245));
+
+ // Center jewel (ruby)
+ g.FillEllipse(rubyBrush, crownX + crownW * 0.5f - jewelSize * 0.7f, crownY - crownH * 0.1f - jewelSize * 0.3f,
+ jewelSize * 1.4f, jewelSize * 1.4f);
+ g.DrawEllipse(thinPen, crownX + crownW * 0.5f - jewelSize * 0.7f, crownY - crownH * 0.1f - jewelSize * 0.3f,
+ jewelSize * 1.4f, jewelSize * 1.4f);
+
+ // Side jewels
+ g.FillEllipse(sapphireBrush, crownX + crownW * 0.28f - jewelSize/2, crownY + crownH * 0.1f, jewelSize, jewelSize);
+ g.FillEllipse(sapphireBrush, crownX + crownW * 0.72f - jewelSize/2, crownY + crownH * 0.1f, jewelSize, jewelSize);
+
+ // Pearls
+ g.FillEllipse(pearlBrush, crownX + crownW * 0.08f - jewelSize * 0.4f, crownY + crownH * 0.3f, jewelSize * 0.8f, jewelSize * 0.8f);
+ g.FillEllipse(pearlBrush, crownX + crownW * 0.92f - jewelSize * 0.4f, crownY + crownH * 0.3f, jewelSize * 0.8f, jewelSize * 0.8f);
+
+ // Detailed eyes
+ float eyeW = headW * 0.12f;
+ float eyeH = headH * 0.07f;
+
+ // Left eye
+ DrawDetailedEye(g, headRect.X + headW * 0.22f, headRect.Y + headH * 0.38f, eyeW, eyeH,
+ Color.FromArgb(100, 80, 60), thinPen);
+ // Right eye
+ DrawDetailedEye(g, headRect.X + headW * 0.66f, headRect.Y + headH * 0.38f, eyeW, eyeH,
+ Color.FromArgb(100, 80, 60), thinPen);
+
+ // Eyebrows
+ using var browPen = new Pen(Color.FromArgb(120, 90, 50), thinPen.Width);
+ g.DrawArc(browPen, headRect.X + headW * 0.18f, headRect.Y + headH * 0.28f, eyeW * 1.3f, eyeH, 200, 70);
+ g.DrawArc(browPen, headRect.X + headW * 0.62f, headRect.Y + headH * 0.28f, eyeW * 1.3f, eyeH, 250, 70);
+
+ // Elegant nose
+ g.DrawBezier(thinPen,
+ new PointF(headRect.X + headW * 0.48f, headRect.Y + headH * 0.4f),
+ new PointF(headRect.X + headW * 0.5f, headRect.Y + headH * 0.5f),
+ new PointF(headRect.X + headW * 0.52f, headRect.Y + headH * 0.55f),
+ new PointF(headRect.X + headW * 0.5f, headRect.Y + headH * 0.58f));
+
+ // Lips with detail
+ using var lipBrush = new SolidBrush(Color.FromArgb(200, 90, 90));
+ using var lipHighlight = new SolidBrush(Color.FromArgb(100, 255, 200, 200));
+
+ // Upper lip
+ PointF[] upperLip = {
+ new PointF(headRect.X + headW * 0.38f, headRect.Y + headH * 0.68f),
+ new PointF(headRect.X + headW * 0.45f, headRect.Y + headH * 0.65f),
+ new PointF(headRect.X + headW * 0.5f, headRect.Y + headH * 0.67f),
+ new PointF(headRect.X + headW * 0.55f, headRect.Y + headH * 0.65f),
+ new PointF(headRect.X + headW * 0.62f, headRect.Y + headH * 0.68f),
+ new PointF(headRect.X + headW * 0.5f, headRect.Y + headH * 0.72f)
+ };
+ g.FillPolygon(lipBrush, upperLip);
+
+ // Lower lip
+ g.FillEllipse(lipBrush, headRect.X + headW * 0.4f, headRect.Y + headH * 0.69f, headW * 0.2f, headH * 0.08f);
+ g.FillEllipse(lipHighlight, headRect.X + headW * 0.44f, headRect.Y + headH * 0.71f, headW * 0.08f, headH * 0.03f);
+
+ // Elegant flower scepter
+ float flowerX = half.X + half.Width * 0.85f;
+ float flowerY = half.Y + half.Height * 0.25f;
+ DrawElaborateFlower(g, flowerX, flowerY, half.Width * 0.1f, color, gold, outlinePen, thinPen);
+
+ // Flower stem
+ using var stemPen = new Pen(Color.FromArgb(80, 120, 60), outlinePen.Width * 1.2f);
+ g.DrawBezier(stemPen,
+ new PointF(flowerX, flowerY + half.Width * 0.08f),
+ new PointF(flowerX - half.Width * 0.02f, flowerY + half.Height * 0.3f),
+ new PointF(flowerX + half.Width * 0.02f, flowerY + half.Height * 0.5f),
+ new PointF(flowerX - half.Width * 0.01f, half.Bottom));
+
+ // Small leaves on stem
+ using var leafBrush = new SolidBrush(Color.FromArgb(100, 140, 80));
+ PointF[] leaf1 = {
+ new PointF(flowerX, flowerY + half.Height * 0.35f),
+ new PointF(flowerX + half.Width * 0.06f, flowerY + half.Height * 0.32f),
+ new PointF(flowerX + half.Width * 0.02f, flowerY + half.Height * 0.4f)
+ };
+ g.FillPolygon(leafBrush, leaf1);
+
+ g.Restore(state);
+ }
+
+ private static void DrawDetailedEye(Graphics g, float x, float y, float w, float h, Color irisColor, Pen outlinePen)
+ {
+ // Eye white
+ using var whiteBrush = new SolidBrush(Color.FromArgb(252, 252, 252));
+ g.FillEllipse(whiteBrush, x, y, w, h);
+
+ // Iris
+ using var irisBrush = new SolidBrush(irisColor);
+ float irisW = w * 0.5f;
+ float irisH = h * 0.85f;
+ g.FillEllipse(irisBrush, x + w * 0.25f, y + h * 0.08f, irisW, irisH);
+
+ // Pupil
+ using var pupilBrush = new SolidBrush(Color.Black);
+ g.FillEllipse(pupilBrush, x + w * 0.35f, y + h * 0.2f, irisW * 0.6f, irisH * 0.6f);
+
+ // Highlight
+ using var highlightBrush = new SolidBrush(Color.White);
+ g.FillEllipse(highlightBrush, x + w * 0.32f, y + h * 0.15f, w * 0.12f, h * 0.25f);
+
+ // Eye outline
+ g.DrawEllipse(outlinePen, x, y, w, h);
+
+ // Eyelashes
+ using var lashPen = new Pen(Color.FromArgb(60, 40, 30), outlinePen.Width * 0.4f);
+ for (int i = 0; i < 4; i++)
+ {
+ float lx = x + w * (0.15f + i * 0.22f);
+ g.DrawLine(lashPen, lx, y, lx - w * 0.02f, y - h * 0.15f);
+ }
+ }
+
+ private static void DrawElaborateFlower(Graphics g, float x, float y, float size, Color petalColor, Color centerColor, Pen outlinePen, Pen thinPen)
+ {
+ // Outer petals
+ RectangleF petalRect = new RectangleF(x - size, y - size, size * 2, size * 2);
+ using var petalGradient = new LinearGradientBrush(petalRect,
+ LightenColor(petalColor, 0.3f), petalColor, 45f);
+
+ for (int i = 0; i < 6; i++)
+ {
+ float angle = i * 60 * (float)System.Math.PI / 180;
+ float px = x + (float)System.Math.Cos(angle) * size * 0.7f;
+ float py = y + (float)System.Math.Sin(angle) * size * 0.7f;
+
+ g.FillEllipse(petalGradient, px - size * 0.45f, py - size * 0.45f, size * 0.9f, size * 0.9f);
+ g.DrawEllipse(thinPen, px - size * 0.45f, py - size * 0.45f, size * 0.9f, size * 0.9f);
+ }
+
+ // Inner petals
+ for (int i = 0; i < 6; i++)
+ {
+ float angle = (i * 60 + 30) * (float)System.Math.PI / 180;
+ float px = x + (float)System.Math.Cos(angle) * size * 0.4f;
+ float py = y + (float)System.Math.Sin(angle) * size * 0.4f;
+
+ using var innerBrush = new SolidBrush(LightenColor(petalColor, 0.2f));
+ g.FillEllipse(innerBrush, px - size * 0.3f, py - size * 0.3f, size * 0.6f, size * 0.6f);
+ }
+
+ // Center
+ using var centerBrush = new SolidBrush(centerColor);
+ g.FillEllipse(centerBrush, x - size * 0.25f, y - size * 0.25f, size * 0.5f, size * 0.5f);
+ g.DrawEllipse(thinPen, x - size * 0.25f, y - size * 0.25f, size * 0.5f, size * 0.5f);
+
+ // Center dots
+ using var dotBrush = new SolidBrush(Color.FromArgb(180, 140, 40));
+ for (int i = 0; i < 5; i++)
+ {
+ float angle = i * 72 * (float)System.Math.PI / 180;
+ float dx = x + (float)System.Math.Cos(angle) * size * 0.12f;
+ float dy = y + (float)System.Math.Sin(angle) * size * 0.12f;
+ g.FillEllipse(dotBrush, dx - size * 0.04f, dy - size * 0.04f, size * 0.08f, size * 0.08f);
+ }
+ }
+
+ private static void DrawJackEye(Graphics g, float x, float y, float w, float h, Pen outlinePen)
+ {
+ // Eye white
+ using var whiteBrush = new SolidBrush(Color.FromArgb(252, 252, 252));
+ g.FillEllipse(whiteBrush, x, y, w, h);
+
+ // Iris
+ using var irisBrush = new SolidBrush(Color.FromArgb(80, 60, 40));
+ float irisW = w * 0.5f;
+ float irisH = h * 0.85f;
+ g.FillEllipse(irisBrush, x + w * 0.25f, y + h * 0.08f, irisW, irisH);
+
+ // Pupil
+ using var pupilBrush = new SolidBrush(Color.Black);
+ g.FillEllipse(pupilBrush, x + w * 0.35f, y + h * 0.2f, irisW * 0.6f, irisH * 0.6f);
+
+ // Highlight
+ using var highlightBrush = new SolidBrush(Color.White);
+ g.FillEllipse(highlightBrush, x + w * 0.32f, y + h * 0.15f, w * 0.12f, h * 0.25f);
+
+ // Eye outline
+ g.DrawEllipse(outlinePen, x, y, w, h);
}
private static void DrawKing(Graphics g, Rectangle rect, Color color, string suit)
{
- // Simple stylized King vector drawing
- RectangleF inner = RectangleF.Inflate(rect, -rect.Width * 0.15f, -rect.Height * 0.2f);
- using var robeBrush = new SolidBrush(Color.FromArgb(230, color));
- using var outlinePen = new Pen(Color.Black, rect.Width / 150f);
- using var faceBrush = new SolidBrush(Color.Beige);
- using var goldBrush = new SolidBrush(Color.Gold);
-
- // Robe (rounded rectangle)
- RectangleF robe = new RectangleF(inner.X + inner.Width * 0.25f, inner.Y + inner.Height * 0.4f,
- inner.Width * 0.5f, inner.Height * 0.5f);
- using (GraphicsPath robePath = new GraphicsPath())
+ // French-style King (Roi) - elaborate mirrored double-headed design
+ float penW = System.Math.Max(1f, rect.Width / 120f);
+ using var outlinePen = new Pen(Color.FromArgb(50, 30, 15), penW);
+ using var thinPen = new Pen(Color.FromArgb(50, 30, 15), penW * 0.5f);
+
+ // Colors - royal palette
+ Color cream = Color.FromArgb(255, 252, 245);
+ Color gold = Color.FromArgb(212, 175, 55);
+ Color darkGold = Color.FromArgb(170, 135, 30);
+ Color lightGold = Color.FromArgb(255, 223, 120);
+ Color skinTone = Color.FromArgb(255, 218, 185);
+ Color skinShadow = Color.FromArgb(235, 190, 160);
+ Color beardColor = Color.FromArgb(110, 75, 40);
+ Color beardHighlight = Color.FromArgb(150, 110, 65);
+
+ // Draw decorative frame with gradient
+ RectangleF frameRect = new RectangleF(rect.X + rect.Width * 0.10f, rect.Y + rect.Height * 0.06f,
+ rect.Width * 0.80f, rect.Height * 0.88f);
+ using var frameBrush = new LinearGradientBrush(frameRect, cream, Color.FromArgb(250, 245, 235), 45f);
+ g.FillRectangle(frameBrush, frameRect);
+
+ // Royal cross-hatch pattern in background
+ using var patternPen = new Pen(Color.FromArgb(10, color), penW * 0.3f);
+ for (float i = frameRect.X; i < frameRect.Right + frameRect.Height; i += rect.Width * 0.035f)
{
- float r = robe.Width * 0.2f;
- robePath.AddArc(robe.X, robe.Y, r, r, 180, 90);
- robePath.AddArc(robe.Right - r, robe.Y, r, r, 270, 90);
- robePath.AddArc(robe.Right - r, robe.Bottom - r, r, r, 0, 90);
- robePath.AddArc(robe.X, robe.Bottom - r, r, r, 90, 90);
- robePath.CloseFigure();
- g.FillPath(robeBrush, robePath);
- g.DrawPath(outlinePen, robePath);
+ g.DrawLine(patternPen, i, frameRect.Y, i - frameRect.Height * 0.4f, frameRect.Bottom);
+ g.DrawLine(patternPen, i - frameRect.Height * 0.4f, frameRect.Y, i, frameRect.Bottom);
}
- // Scepter (Left side)
- float scepterX = inner.X + inner.Width * 0.15f;
- float scepterY = inner.Bottom - inner.Height * 0.7f;
- float scepterW = inner.Width * 0.05f;
- float scepterH = inner.Height * 0.6f;
- g.FillRectangle(goldBrush, scepterX, scepterY, scepterW, scepterH);
- g.DrawRectangle(outlinePen, scepterX, scepterY, scepterW, scepterH);
- // Scepter Head
- float sHeadSize = inner.Width * 0.12f;
- g.FillEllipse(goldBrush, scepterX + scepterW/2 - sHeadSize/2, scepterY - sHeadSize/2, sHeadSize, sHeadSize);
- g.DrawEllipse(outlinePen, scepterX + scepterW/2 - sHeadSize/2, scepterY - sHeadSize/2, sHeadSize, sHeadSize);
-
- // Orb (Reichsapfel) (Right side)
- float orbSize = inner.Width * 0.25f;
- float orbX = inner.Right - orbSize * 1.2f;
- float orbY = inner.Bottom - orbSize * 1.5f;
- RectangleF orbRect = new RectangleF(orbX, orbY, orbSize, orbSize);
- g.FillEllipse(goldBrush, orbRect);
- g.DrawEllipse(outlinePen, orbRect);
- // Cross on Orb
- float oCrossW = orbSize * 0.2f;
- float oCrossH = orbSize * 0.3f;
- float oCrossX = orbX + orbSize/2 - oCrossW/2;
- float oCrossY = orbY - oCrossH * 0.8f;
- g.FillRectangle(goldBrush, oCrossX, oCrossY, oCrossW, oCrossH); // Vertical
- g.DrawRectangle(outlinePen, oCrossX, oCrossY, oCrossW, oCrossH);
- g.FillRectangle(goldBrush, oCrossX - oCrossW, oCrossY + oCrossH * 0.3f, oCrossW * 3, oCrossW); // Horizontal
- g.DrawRectangle(outlinePen, oCrossX - oCrossW, oCrossY + oCrossH * 0.3f, oCrossW * 3, oCrossW);
-
- // Suit on Orb
- using var suitFont = new Font("Arial", orbSize * 0.6f, FontStyle.Bold);
+ // Inner decorative border - triple line royal style
+ float borderInset = rect.Width * 0.02f;
+ RectangleF innerFrame = RectangleF.Inflate(frameRect, -borderInset * 2, -borderInset * 2);
+ using var borderPen = new Pen(color, penW * 1.2f);
+ using var goldBorderPen = new Pen(gold, penW * 0.6f);
+ g.DrawRectangle(borderPen, innerFrame.X, innerFrame.Y, innerFrame.Width, innerFrame.Height);
+ g.DrawRectangle(goldBorderPen, innerFrame.X - penW, innerFrame.Y - penW, innerFrame.Width + penW * 2, innerFrame.Height + penW * 2);
+ g.DrawRectangle(goldBorderPen, innerFrame.X + penW * 2, innerFrame.Y + penW * 2, innerFrame.Width - penW * 4, innerFrame.Height - penW * 4);
+
+ // Royal crown corner ornaments
+ DrawRoyalCorner(g, innerFrame.X, innerFrame.Y, rect.Width * 0.1f, gold, color, outlinePen, false, false);
+ DrawRoyalCorner(g, innerFrame.Right, innerFrame.Y, rect.Width * 0.1f, gold, color, outlinePen, true, false);
+ DrawRoyalCorner(g, innerFrame.X, innerFrame.Bottom, rect.Width * 0.1f, gold, color, outlinePen, false, true);
+ DrawRoyalCorner(g, innerFrame.Right, innerFrame.Bottom, rect.Width * 0.1f, gold, color, outlinePen, true, true);
+
+ // Draw upper half figure
+ DrawKingHalf(g, innerFrame, color, suit, false, outlinePen, thinPen, skinTone, skinShadow, beardColor, beardHighlight, gold, darkGold, lightGold);
+
+ // Draw lower half figure (mirrored)
+ DrawKingHalf(g, innerFrame, color, suit, true, outlinePen, thinPen, skinTone, skinShadow, beardColor, beardHighlight, gold, darkGold, lightGold);
+
+ // Center medallion with suit symbol and royal seal
+ float centerY = innerFrame.Y + innerFrame.Height / 2;
+ float medalSize = innerFrame.Width * 0.26f;
+ RectangleF medalRect = new RectangleF(innerFrame.X + innerFrame.Width / 2 - medalSize / 2,
+ centerY - medalSize / 2, medalSize, medalSize);
+
+ // Royal seal medallion with multiple rings
+ using var sealGradient = new LinearGradientBrush(medalRect, Color.White, Color.FromArgb(245, 240, 225), 135f);
+ g.FillEllipse(sealGradient, medalRect);
+
+ // Decorative rings
+ using var outerRingPen = new Pen(gold, penW * 2.5f);
+ g.DrawEllipse(outerRingPen, medalRect);
+ using var innerRingPen = new Pen(color, penW * 1.2f);
+ g.DrawEllipse(innerRingPen, RectangleF.Inflate(medalRect, -penW * 3, -penW * 3));
+ using var centerRingPen = new Pen(gold, penW * 0.8f);
+ g.DrawEllipse(centerRingPen, RectangleF.Inflate(medalRect, -penW * 5, -penW * 5));
+
+ // Suit symbol
+ using var suitFont = new Font("Segoe UI Symbol", medalSize * 0.4f, FontStyle.Bold);
using var suitBrush = new SolidBrush(color);
StringFormat sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
- g.DrawString(suit, suitFont, suitBrush, orbRect, sf);
-
- // Head
- float headRadius = inner.Width * 0.18f;
- PointF headCenter = new PointF(inner.X + inner.Width * 0.5f, inner.Y + inner.Height * 0.24f);
- RectangleF head = new RectangleF(headCenter.X - headRadius, headCenter.Y - headRadius,
- headRadius * 2, headRadius * 2);
- g.FillEllipse(faceBrush, head);
- g.DrawEllipse(outlinePen, head);
-
- // Eyes
- float eyeSize = headRadius * 0.2f;
- using var eyeBrush = new SolidBrush(Color.Black);
- g.FillEllipse(eyeBrush, headCenter.X - headRadius * 0.35f, headCenter.Y - headRadius * 0.2f, eyeSize, eyeSize);
- g.FillEllipse(eyeBrush, headCenter.X + headRadius * 0.35f - eyeSize, headCenter.Y - headRadius * 0.2f, eyeSize, eyeSize);
-
- // Beard
- RectangleF beard = new RectangleF(head.X + head.Width * 0.225f, headCenter.Y + headRadius * 0.2f,
- head.Width * 0.55f, headRadius * 0.85f);
- using var beardBrush = new SolidBrush(Color.FromArgb(160, 120, 80));
- g.FillEllipse(beardBrush, beard);
- g.DrawEllipse(outlinePen, beard);
- RectangleF beard2 = new RectangleF(head.X + head.Width * 0.3f, headCenter.Y + headRadius * 0.3f,
- head.Width * 0.4f, headRadius * 0.3f);
- g.FillEllipse(faceBrush, beard2);
- g.DrawEllipse(outlinePen, beard2);
-
-
- // 5-pointed Golden Crown
- float crownBaseY = head.Y + headRadius * 0.5f;
- float crownH = headRadius * 1.2f;
- float crownW = head.Width * 1.1f;
- float crownX = headCenter.X - crownW / 2;
-
- PointF[] crownPts = new PointF[11]; // 5 points + 2 base points
- crownPts[0] = new PointF(crownX+ crownW * 0.1f, crownBaseY); // Base Left
- crownPts[1] = new PointF(crownX, crownBaseY - crownH * 0.6f); // Point 1
- crownPts[2] = new PointF(crownX + crownW * 0.125f, crownBaseY - crownH * 0.4f); // Point 2
- crownPts[3] = new PointF(crownX + crownW * 0.25f, crownBaseY - crownH * 0.9f); // Point 2
- crownPts[4] = new PointF(crownX + crownW * 0.375f, crownBaseY - crownH * 0.5f); // Point 2
- crownPts[5] = new PointF(crownX + crownW * 0.5f, crownBaseY - crownH); // Point 3 (Middle)
- crownPts[6] = new PointF(crownX + crownW * 0.625f, crownBaseY - crownH *0.5f); // Point 3 (Middle)
- crownPts[7] = new PointF(crownX + crownW * 0.75f, crownBaseY - crownH * 0.9f); // Point 4
- crownPts[8] = new PointF(crownX + crownW * 0.875f, crownBaseY - crownH * 0.4f); // Point 4
- crownPts[9] = new PointF(crownX + crownW, crownBaseY - crownH * 0.6f); // Point 5
- crownPts[10] = new PointF(crownX + crownW *0.9f, crownBaseY); // Base Right
-
- g.FillPolygon(goldBrush, crownPts);
- g.DrawPolygon(outlinePen, crownPts);
-
- // Gemstones on Crown
- float gemSize = crownW * 0.1f;
- float gemY = crownBaseY - gemSize * 1.5f;
- using var gemBrush = new SolidBrush(color);
-
- // Gems
- g.FillEllipse(gemBrush, crownX + crownW * 0.2f, gemY, gemSize, gemSize);
- g.FillEllipse(gemBrush, crownX + crownW * 0.5f - gemSize/2, gemY - gemSize * 0.5f, gemSize, gemSize);
- g.FillEllipse(gemBrush, crownX + crownW * 0.8f - gemSize, gemY, gemSize, gemSize);
-
- g.FillEllipse(gemBrush, crownX + crownW * 0.0f - gemSize / 2, crownBaseY- crownH *0.6f- gemSize * 0.5f, gemSize, gemSize);
- g.FillEllipse(gemBrush, crownX + crownW * 0.25f - gemSize / 2, crownBaseY - crownH *0.9f- gemSize * 0.5f, gemSize, gemSize);
- g.FillEllipse(gemBrush, crownX + crownW * 0.5f - gemSize / 2, crownBaseY - crownH - gemSize * 0.5f, gemSize, gemSize);
- g.FillEllipse(gemBrush, crownX + crownW * 0.75f - gemSize / 2, crownBaseY - crownH *0.9f- gemSize * 0.5f, gemSize, gemSize);
- g.FillEllipse(gemBrush, crownX + crownW * 1.0f - gemSize/2, crownBaseY - crownH *0.6f- gemSize * 0.5f, gemSize, gemSize);
+ g.DrawString(suit, suitFont, suitBrush, medalRect, sf);
+ }
+
+ private static void DrawRoyalCorner(Graphics g, float x, float y, float size, Color gold, Color accent, Pen outlinePen, bool flipH, bool flipV)
+ {
+ var state = g.Save();
+ g.TranslateTransform(x, y);
+ if (flipH) g.ScaleTransform(-1, 1);
+ if (flipV) g.ScaleTransform(1, -1);
+
+ using var goldBrush = new SolidBrush(gold);
+ using var accentBrush = new SolidBrush(accent);
+
+ // Crown-like corner ornament
+ PointF[] crownOrn = {
+ new PointF(0, 0),
+ new PointF(size * 0.4f, 0),
+ new PointF(size * 0.3f, size * 0.15f),
+ new PointF(size * 0.5f, size * 0.08f),
+ new PointF(size * 0.35f, size * 0.25f),
+ new PointF(size * 0.25f, size * 0.35f),
+ new PointF(size * 0.08f, size * 0.5f),
+ new PointF(size * 0.15f, size * 0.3f),
+ new PointF(0, size * 0.4f)
+ };
+ g.FillPolygon(goldBrush, crownOrn);
+ g.DrawPolygon(outlinePen, crownOrn);
+
+ // Small jewel
+ float jewelX = size * 0.12f;
+ float jewelY = size * 0.12f;
+ float jewelSize = size * 0.1f;
+ g.FillEllipse(accentBrush, jewelX, jewelY, jewelSize, jewelSize);
+
+ g.Restore(state);
+ }
+
+ private static void DrawKingHalf(Graphics g, RectangleF rect, Color color, string suit, bool mirrored,
+ Pen outlinePen, Pen thinPen, Color skinTone, Color skinShadow, Color beardColor, Color beardHighlight,
+ Color gold, Color darkGold, Color lightGold)
+ {
+ var state = g.Save();
+
+ if (mirrored)
+ {
+ g.TranslateTransform(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
+ g.RotateTransform(180);
+ g.TranslateTransform(-(rect.X + rect.Width / 2), -(rect.Y + rect.Height / 2));
+ }
+
+ float halfH = rect.Height * 0.47f;
+ RectangleF half = new RectangleF(rect.X, rect.Y, rect.Width, halfH);
+
+ // Royal robe with rich gradient and ermine trim
+ RectangleF robeRect = new RectangleF(half.X + half.Width * 0.1f, half.Y + half.Height * 0.38f,
+ half.Width * 0.8f, half.Height * 0.62f);
+ using var robeGradient = new LinearGradientBrush(robeRect,
+ Color.FromArgb(255, color), Color.FromArgb(200, DarkenColor(color, 0.2f)), 90f);
+
+ PointF[] robe = {
+ new PointF(half.X + half.Width * 0.1f, half.Bottom),
+ new PointF(half.X + half.Width * 0.15f, half.Y + half.Height * 0.52f),
+ new PointF(half.X + half.Width * 0.22f, half.Y + half.Height * 0.45f),
+ new PointF(half.X + half.Width * 0.5f, half.Y + half.Height * 0.38f),
+ new PointF(half.X + half.Width * 0.78f, half.Y + half.Height * 0.45f),
+ new PointF(half.X + half.Width * 0.85f, half.Y + half.Height * 0.52f),
+ new PointF(half.X + half.Width * 0.9f, half.Bottom)
+ };
+ g.FillPolygon(robeGradient, robe);
+ g.DrawPolygon(outlinePen, robe);
+
+ // Robe folds
+ using var foldPen = new Pen(Color.FromArgb(50, 0, 0, 0), thinPen.Width);
+ using var highlightPen = new Pen(Color.FromArgb(60, 255, 255, 255), thinPen.Width);
+ g.DrawBezier(foldPen,
+ new PointF(half.X + half.Width * 0.35f, half.Y + half.Height * 0.48f),
+ new PointF(half.X + half.Width * 0.32f, half.Y + half.Height * 0.65f),
+ new PointF(half.X + half.Width * 0.28f, half.Y + half.Height * 0.8f),
+ new PointF(half.X + half.Width * 0.22f, half.Bottom));
+ g.DrawBezier(highlightPen,
+ new PointF(half.X + half.Width * 0.38f, half.Y + half.Height * 0.48f),
+ new PointF(half.X + half.Width * 0.36f, half.Y + half.Height * 0.65f),
+ new PointF(half.X + half.Width * 0.33f, half.Y + half.Height * 0.8f),
+ new PointF(half.X + half.Width * 0.28f, half.Bottom));
+ g.DrawBezier(foldPen,
+ new PointF(half.X + half.Width * 0.65f, half.Y + half.Height * 0.48f),
+ new PointF(half.X + half.Width * 0.68f, half.Y + half.Height * 0.65f),
+ new PointF(half.X + half.Width * 0.72f, half.Y + half.Height * 0.8f),
+ new PointF(half.X + half.Width * 0.78f, half.Bottom));
+
+ // Elaborate ermine collar with spots
+ using var ermineBrush = new SolidBrush(Color.FromArgb(255, 252, 248));
+ PointF[] collar = {
+ new PointF(half.X + half.Width * 0.25f, half.Y + half.Height * 0.45f),
+ new PointF(half.X + half.Width * 0.32f, half.Y + half.Height * 0.52f),
+ new PointF(half.X + half.Width * 0.42f, half.Y + half.Height * 0.56f),
+ new PointF(half.X + half.Width * 0.5f, half.Y + half.Height * 0.58f),
+ new PointF(half.X + half.Width * 0.58f, half.Y + half.Height * 0.56f),
+ new PointF(half.X + half.Width * 0.68f, half.Y + half.Height * 0.52f),
+ new PointF(half.X + half.Width * 0.75f, half.Y + half.Height * 0.45f),
+ new PointF(half.X + half.Width * 0.5f, half.Y + half.Height * 0.38f)
+ };
+ g.FillPolygon(ermineBrush, collar);
+ g.DrawPolygon(thinPen, collar);
+
+ // Ermine spots (black tail tips)
+ using var spotBrush = new SolidBrush(Color.FromArgb(35, 25, 15));
+ float spotH = half.Width * 0.012f;
+ float spotW = spotH * 0.6f;
+ float[] spotXs = { 0.35f, 0.42f, 0.5f, 0.58f, 0.65f };
+ float[] spotYs = { 0.48f, 0.52f, 0.54f, 0.52f, 0.48f };
+ for (int i = 0; i < spotXs.Length; i++)
+ {
+ g.FillEllipse(spotBrush, half.X + half.Width * spotXs[i], half.Y + half.Height * spotYs[i], spotW, spotH * 2.5f);
+ }
+ // Second row
+ float[] spotXs2 = { 0.38f, 0.46f, 0.54f, 0.62f };
+ for (int i = 0; i < spotXs2.Length; i++)
+ {
+ g.FillEllipse(spotBrush, half.X + half.Width * spotXs2[i], half.Y + half.Height * 0.44f, spotW, spotH * 2.5f);
+ }
+
+ // Royal chain with medallion
+ using var chainPen = new Pen(gold, outlinePen.Width * 2f);
+ g.DrawArc(chainPen, half.X + half.Width * 0.35f, half.Y + half.Height * 0.48f,
+ half.Width * 0.3f, half.Height * 0.16f, 0, 180);
+
+ // Chain links detail
+ using var linkPen = new Pen(darkGold, thinPen.Width);
+ for (float lx = half.X + half.Width * 0.38f; lx < half.X + half.Width * 0.62f; lx += half.Width * 0.04f)
+ {
+ float ly = half.Y + half.Height * 0.52f + (float)System.Math.Sin((lx - half.X) * 0.1f) * half.Height * 0.04f;
+ g.DrawEllipse(linkPen, lx, ly, half.Width * 0.025f, half.Height * 0.02f);
+ }
+
+ // Royal medallion on chain
+ using var medalGradient = new LinearGradientBrush(
+ new RectangleF(half.X + half.Width * 0.44f, half.Y + half.Height * 0.58f, half.Width * 0.12f, half.Width * 0.12f),
+ lightGold, gold, 135f);
+ float medalX = half.X + half.Width * 0.5f;
+ float medalY = half.Y + half.Height * 0.62f;
+ float medalSize = half.Width * 0.1f;
+ g.FillEllipse(medalGradient, medalX - medalSize / 2, medalY, medalSize, medalSize);
+ g.DrawEllipse(outlinePen, medalX - medalSize / 2, medalY, medalSize, medalSize);
+
+ // Cross on medallion
+ using var crossPen = new Pen(color, thinPen.Width * 1.5f);
+ g.DrawLine(crossPen, medalX, medalY + medalSize * 0.2f, medalX, medalY + medalSize * 0.8f);
+ g.DrawLine(crossPen, medalX - medalSize * 0.3f, medalY + medalSize * 0.5f, medalX + medalSize * 0.3f, medalY + medalSize * 0.5f);
+
+ // Head with detailed shading
+ float headW = half.Width * 0.24f;
+ float headH = half.Height * 0.32f;
+ RectangleF headRect = new RectangleF(half.X + half.Width * 0.5f - headW / 2,
+ half.Y + half.Height * 0.08f, headW, headH);
+
+ // Face with gradient
+ using var faceGradient = new LinearGradientBrush(headRect, skinTone, skinShadow, 130f);
+ g.FillEllipse(faceGradient, headRect);
+ g.DrawEllipse(outlinePen, headRect);
+
+ // Elaborate beard with gradient and texture
+ using var beardGradient = new LinearGradientBrush(
+ new RectangleF(headRect.X + headW * 0.1f, headRect.Y + headH * 0.45f, headW * 0.8f, headH * 0.7f),
+ beardHighlight, beardColor, 90f);
+
+ // Main beard shape
+ PointF[] beard = {
+ new PointF(headRect.X + headW * 0.15f, headRect.Y + headH * 0.5f),
+ new PointF(headRect.X + headW * 0.1f, headRect.Y + headH * 0.7f),
+ new PointF(headRect.X + headW * 0.2f, headRect.Y + headH * 0.9f),
+ new PointF(headRect.X + headW * 0.35f, headRect.Y + headH * 1.05f),
+ new PointF(headRect.X + headW * 0.5f, headRect.Y + headH * 1.1f),
+ new PointF(headRect.X + headW * 0.65f, headRect.Y + headH * 1.05f),
+ new PointF(headRect.X + headW * 0.8f, headRect.Y + headH * 0.9f),
+ new PointF(headRect.X + headW * 0.9f, headRect.Y + headH * 0.7f),
+ new PointF(headRect.X + headW * 0.85f, headRect.Y + headH * 0.5f)
+ };
+ g.FillPolygon(beardGradient, beard);
+ g.DrawPolygon(thinPen, beard);
+
+ // Beard texture (wavy lines)
+ using var beardTexturePen = new Pen(Color.FromArgb(60, 80, 55, 30), thinPen.Width * 0.5f);
+ for (int i = 0; i < 5; i++)
+ {
+ float bx = headRect.X + headW * (0.25f + i * 0.12f);
+ g.DrawBezier(beardTexturePen,
+ new PointF(bx, headRect.Y + headH * 0.55f),
+ new PointF(bx - headW * 0.03f, headRect.Y + headH * 0.7f),
+ new PointF(bx + headW * 0.03f, headRect.Y + headH * 0.85f),
+ new PointF(bx, headRect.Y + headH * 1.0f));
+ }
+
+ // Mustache with detail
+ using var mustacheBrush = new SolidBrush(beardColor);
+ PointF[] leftMustache = {
+ new PointF(headRect.X + headW * 0.48f, headRect.Y + headH * 0.52f),
+ new PointF(headRect.X + headW * 0.3f, headRect.Y + headH * 0.48f),
+ new PointF(headRect.X + headW * 0.15f, headRect.Y + headH * 0.55f),
+ new PointF(headRect.X + headW * 0.2f, headRect.Y + headH * 0.6f),
+ new PointF(headRect.X + headW * 0.35f, headRect.Y + headH * 0.58f),
+ new PointF(headRect.X + headW * 0.48f, headRect.Y + headH * 0.6f)
+ };
+ g.FillPolygon(mustacheBrush, leftMustache);
+
+ PointF[] rightMustache = {
+ new PointF(headRect.X + headW * 0.52f, headRect.Y + headH * 0.52f),
+ new PointF(headRect.X + headW * 0.7f, headRect.Y + headH * 0.48f),
+ new PointF(headRect.X + headW * 0.85f, headRect.Y + headH * 0.55f),
+ new PointF(headRect.X + headW * 0.8f, headRect.Y + headH * 0.6f),
+ new PointF(headRect.X + headW * 0.65f, headRect.Y + headH * 0.58f),
+ new PointF(headRect.X + headW * 0.52f, headRect.Y + headH * 0.6f)
+ };
+ g.FillPolygon(mustacheBrush, rightMustache);
+
+ // Detailed eyes
+ float eyeW = headW * 0.13f;
+ float eyeH = headH * 0.07f;
+ DrawKingEye(g, headRect.X + headW * 0.22f, headRect.Y + headH * 0.32f, eyeW, eyeH, thinPen);
+ DrawKingEye(g, headRect.X + headW * 0.65f, headRect.Y + headH * 0.32f, eyeW, eyeH, thinPen);
+
+ // Stern eyebrows
+ using var browPen = new Pen(beardColor, thinPen.Width * 1.5f);
+ g.DrawLine(browPen, headRect.X + headW * 0.18f, headRect.Y + headH * 0.28f,
+ headRect.X + headW * 0.38f, headRect.Y + headH * 0.25f);
+ g.DrawLine(browPen, headRect.X + headW * 0.62f, headRect.Y + headH * 0.25f,
+ headRect.X + headW * 0.82f, headRect.Y + headH * 0.28f);
+
+ // Nose
+ g.DrawBezier(thinPen,
+ new PointF(headRect.X + headW * 0.48f, headRect.Y + headH * 0.35f),
+ new PointF(headRect.X + headW * 0.5f, headRect.Y + headH * 0.42f),
+ new PointF(headRect.X + headW * 0.52f, headRect.Y + headH * 0.48f),
+ new PointF(headRect.X + headW * 0.5f, headRect.Y + headH * 0.5f));
+
+ // Elaborate royal crown with cross
+ float crownH = headH * 0.6f;
+ float crownW = headW * 1.5f;
+ float crownX = headRect.X - headW * 0.25f;
+ float crownY = headRect.Y - crownH * 0.45f;
+
+ // Crown base band
+ using var crownBaseGradient = new LinearGradientBrush(
+ new RectangleF(crownX, crownY + crownH * 0.55f, crownW, crownH * 0.45f),
+ lightGold, gold, 90f);
+ RectangleF crownBase = new RectangleF(crownX, crownY + crownH * 0.55f, crownW, crownH * 0.45f);
+ g.FillRectangle(crownBaseGradient, crownBase);
+ g.DrawRectangle(outlinePen, crownBase.X, crownBase.Y, crownBase.Width, crownBase.Height);
+
+ // Velvet interior (visible above base)
+ using var velvetBrush = new SolidBrush(color);
+ RectangleF velvetRect = new RectangleF(crownX + crownW * 0.08f, crownY + crownH * 0.4f,
+ crownW * 0.84f, crownH * 0.2f);
+ g.FillRectangle(velvetBrush, velvetRect);
+
+ // Crown arches with gradient
+ using var archGradient = new LinearGradientBrush(
+ new RectangleF(crownX, crownY, crownW, crownH * 0.6f), lightGold, gold, 90f);
+
+ PointF[] crownArch = {
+ new PointF(crownX + crownW * 0.08f, crownY + crownH * 0.55f),
+ new PointF(crownX + crownW * 0.15f, crownY + crownH * 0.2f),
+ new PointF(crownX + crownW * 0.3f, crownY + crownH * 0.35f),
+ new PointF(crownX + crownW * 0.5f, crownY - crownH * 0.05f),
+ new PointF(crownX + crownW * 0.7f, crownY + crownH * 0.35f),
+ new PointF(crownX + crownW * 0.85f, crownY + crownH * 0.2f),
+ new PointF(crownX + crownW * 0.92f, crownY + crownH * 0.55f)
+ };
+ g.FillPolygon(archGradient, crownArch);
+ g.DrawPolygon(outlinePen, crownArch);
+
+ // Fleur-de-lis points on crown
+ DrawFleurDeLis(g, crownX + crownW * 0.15f, crownY + crownH * 0.15f, crownW * 0.08f, gold, outlinePen);
+ DrawFleurDeLis(g, crownX + crownW * 0.5f, crownY - crownH * 0.1f, crownW * 0.1f, gold, outlinePen);
+ DrawFleurDeLis(g, crownX + crownW * 0.85f, crownY + crownH * 0.15f, crownW * 0.08f, gold, outlinePen);
+
+ // Cross on top (monde)
+ float crossX = crownX + crownW * 0.5f;
+ float crossY = crownY - crownH * 0.15f;
+ float crossSize = crownW * 0.08f;
+
+ // Orb
+ using var orbGradient = new LinearGradientBrush(
+ new RectangleF(crossX - crossSize * 0.7f, crossY - crossSize * 0.3f, crossSize * 1.4f, crossSize * 1.4f),
+ lightGold, gold, 135f);
+ g.FillEllipse(orbGradient, crossX - crossSize * 0.5f, crossY, crossSize, crossSize);
+ g.DrawEllipse(outlinePen, crossX - crossSize * 0.5f, crossY, crossSize, crossSize);
+
+ // Cross on orb
+ using var crossBrush = new SolidBrush(gold);
+ g.FillRectangle(crossBrush, crossX - crossSize * 0.08f, crossY - crossSize * 0.5f, crossSize * 0.16f, crossSize * 0.6f);
+ g.FillRectangle(crossBrush, crossX - crossSize * 0.25f, crossY - crossSize * 0.3f, crossSize * 0.5f, crossSize * 0.12f);
+
+ // Crown jewels
+ float jewelSize = crownW * 0.055f;
+ using var rubyBrush = new SolidBrush(Color.FromArgb(180, 20, 40));
+ using var sapphireBrush = new SolidBrush(Color.FromArgb(30, 60, 150));
+ using var emeraldBrush = new SolidBrush(Color.FromArgb(30, 120, 60));
+
+ // Band jewels
+ g.FillEllipse(rubyBrush, crownX + crownW * 0.2f, crownY + crownH * 0.65f, jewelSize, jewelSize);
+ g.FillEllipse(sapphireBrush, crownX + crownW * 0.4f, crownY + crownH * 0.65f, jewelSize, jewelSize);
+ g.FillEllipse(emeraldBrush, crownX + crownW * 0.5f - jewelSize / 2, crownY + crownH * 0.62f, jewelSize * 1.2f, jewelSize * 1.2f);
+ g.FillEllipse(sapphireBrush, crownX + crownW * 0.6f, crownY + crownH * 0.65f, jewelSize, jewelSize);
+ g.FillEllipse(rubyBrush, crownX + crownW * 0.8f - jewelSize, crownY + crownH * 0.65f, jewelSize, jewelSize);
+
+ // Jewel highlights
+ using var jewelHighlight = new SolidBrush(Color.FromArgb(100, 255, 255, 255));
+ g.FillEllipse(jewelHighlight, crownX + crownW * 0.5f - jewelSize * 0.3f, crownY + crownH * 0.64f, jewelSize * 0.3f, jewelSize * 0.3f);
+
+ // Royal sword (behind shoulder)
+ DrawRoyalSword(g, half.X + half.Width * 0.06f, half.Y + half.Height * 0.02f, half.Width * 0.12f, half.Height * 0.95f,
+ gold, darkGold, outlinePen, thinPen);
+
+ g.Restore(state);
+ }
+
+ private static void DrawKingEye(Graphics g, float x, float y, float w, float h, Pen thinPen)
+ {
+ using var whiteBrush = new SolidBrush(Color.FromArgb(250, 250, 250));
+ g.FillEllipse(whiteBrush, x, y, w, h);
+
+ using var irisBrush = new SolidBrush(Color.FromArgb(70, 55, 45));
+ g.FillEllipse(irisBrush, x + w * 0.28f, y + h * 0.1f, w * 0.45f, h * 0.8f);
+
+ using var pupilBrush = new SolidBrush(Color.Black);
+ g.FillEllipse(pupilBrush, x + w * 0.38f, y + h * 0.22f, w * 0.25f, h * 0.56f);
+
+ using var highlightBrush = new SolidBrush(Color.White);
+ g.FillEllipse(highlightBrush, x + w * 0.35f, y + h * 0.18f, w * 0.12f, h * 0.25f);
+
+ g.DrawEllipse(thinPen, x, y, w, h);
+ }
+
+ private static void DrawFleurDeLis(Graphics g, float x, float y, float size, Color gold, Pen outlinePen)
+ {
+ using var goldBrush = new SolidBrush(gold);
+
+ // Center petal
+ PointF[] center = {
+ new PointF(x, y + size),
+ new PointF(x - size * 0.15f, y + size * 0.3f),
+ new PointF(x, y - size * 0.2f),
+ new PointF(x + size * 0.15f, y + size * 0.3f)
+ };
+ g.FillPolygon(goldBrush, center);
+
+ // Left petal
+ PointF[] left = {
+ new PointF(x - size * 0.1f, y + size * 0.5f),
+ new PointF(x - size * 0.4f, y),
+ new PointF(x - size * 0.35f, y + size * 0.6f)
+ };
+ g.FillPolygon(goldBrush, left);
+
+ // Right petal
+ PointF[] right = {
+ new PointF(x + size * 0.1f, y + size * 0.5f),
+ new PointF(x + size * 0.4f, y),
+ new PointF(x + size * 0.35f, y + size * 0.6f)
+ };
+ g.FillPolygon(goldBrush, right);
+ }
+
+ private static void DrawRoyalSword(Graphics g, float x, float y, float w, float h, Color gold, Color darkGold, Pen outlinePen, Pen thinPen)
+ {
+ // Blade with gradient
+ using var bladeGradient = new LinearGradientBrush(
+ new RectangleF(x, y, w, h * 0.7f),
+ Color.FromArgb(230, 235, 240), Color.FromArgb(180, 185, 195), 0f);
+
+ PointF[] blade = {
+ new PointF(x + w * 0.35f, y),
+ new PointF(x + w * 0.65f, y),
+ new PointF(x + w * 0.6f, y + h * 0.65f),
+ new PointF(x + w * 0.4f, y + h * 0.65f)
+ };
+ g.FillPolygon(bladeGradient, blade);
+ g.DrawPolygon(outlinePen, blade);
+
+ // Blade center line (fuller)
+ using var fullerPen = new Pen(Color.FromArgb(60, 100, 100, 100), thinPen.Width);
+ g.DrawLine(fullerPen, x + w * 0.5f, y + h * 0.05f, x + w * 0.5f, y + h * 0.55f);
+
+ // Elaborate crossguard
+ using var guardGradient = new LinearGradientBrush(
+ new RectangleF(x - w * 0.3f, y + h * 0.63f, w * 1.6f, h * 0.06f),
+ Color.FromArgb(255, 223, 120), gold, 90f);
+ RectangleF guard = new RectangleF(x - w * 0.2f, y + h * 0.64f, w * 1.4f, h * 0.04f);
+ g.FillRectangle(guardGradient, guard);
+ g.DrawRectangle(outlinePen, guard.X, guard.Y, guard.Width, guard.Height);
+
+ // Guard ends (quillons)
+ using var goldBrush = new SolidBrush(gold);
+ g.FillEllipse(goldBrush, x - w * 0.3f, y + h * 0.635f, w * 0.15f, h * 0.05f);
+ g.FillEllipse(goldBrush, x + w * 1.15f, y + h * 0.635f, w * 0.15f, h * 0.05f);
+
+ // Handle (grip) with wire wrapping
+ using var gripGradient = new LinearGradientBrush(
+ new RectangleF(x + w * 0.35f, y + h * 0.68f, w * 0.3f, h * 0.2f),
+ darkGold, Color.FromArgb(120, 85, 30), 0f);
+ RectangleF grip = new RectangleF(x + w * 0.38f, y + h * 0.68f, w * 0.24f, h * 0.18f);
+ g.FillRectangle(gripGradient, grip);
+ g.DrawRectangle(outlinePen, grip.X, grip.Y, grip.Width, grip.Height);
+
+ // Wire wrapping
+ using var wirePen = new Pen(gold, thinPen.Width * 0.7f);
+ for (float wy = grip.Y + h * 0.02f; wy < grip.Bottom - h * 0.01f; wy += h * 0.025f)
+ {
+ g.DrawLine(wirePen, grip.X, wy, grip.Right, wy + h * 0.01f);
+ }
+
+ // Pommel
+ using var pommelGradient = new LinearGradientBrush(
+ new RectangleF(x + w * 0.3f, y + h * 0.85f, w * 0.4f, w * 0.4f),
+ Color.FromArgb(255, 223, 120), gold, 135f);
+ g.FillEllipse(pommelGradient, x + w * 0.32f, y + h * 0.86f, w * 0.36f, w * 0.36f);
+ g.DrawEllipse(outlinePen, x + w * 0.32f, y + h * 0.86f, w * 0.36f, w * 0.36f);
+ // Jewel in pommel
+ using var jewelBrush = new SolidBrush(Color.FromArgb(150, 20, 40));
+ float jewelSize = w * 0.12f;
+ g.FillEllipse(jewelBrush, x + w * 0.5f - jewelSize / 2, y + h * 0.88f, jewelSize, jewelSize);
}
private GraphicsPath RoundedRectangle(Rectangle r, int d)
diff --git a/CSharpBible/Games/DetectiveGame.Console/DetectiveGame.Console.csproj b/CSharpBible/Games/DetectiveGame.Console/DetectiveGame.Console.csproj
index 400994b58..645c746ed 100644
--- a/CSharpBible/Games/DetectiveGame.Console/DetectiveGame.Console.csproj
+++ b/CSharpBible/Games/DetectiveGame.Console/DetectiveGame.Console.csproj
@@ -23,4 +23,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/CSharpBible/Games/DetectiveGame.Tests/DetectiveGame.Tests.csproj b/CSharpBible/Games/DetectiveGame.Tests/DetectiveGame.Tests.csproj
index acff2ea2a..17c22cb15 100644
--- a/CSharpBible/Games/DetectiveGame.Tests/DetectiveGame.Tests.csproj
+++ b/CSharpBible/Games/DetectiveGame.Tests/DetectiveGame.Tests.csproj
@@ -21,4 +21,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/CSharpBible/Games/DetectiveGame.Wpf/DetectiveGame.Wpf.csproj b/CSharpBible/Games/DetectiveGame.Wpf/DetectiveGame.Wpf.csproj
index 3efd58590..6139114ef 100644
--- a/CSharpBible/Games/DetectiveGame.Wpf/DetectiveGame.Wpf.csproj
+++ b/CSharpBible/Games/DetectiveGame.Wpf/DetectiveGame.Wpf.csproj
@@ -13,4 +13,7 @@
+
+
+
\ No newline at end of file
diff --git a/CSharpBible/Games/Directory.Packages.props b/CSharpBible/Games/Directory.Packages.props
index 56c7ac5db..07fa7bc83 100644
--- a/CSharpBible/Games/Directory.Packages.props
+++ b/CSharpBible/Games/Directory.Packages.props
@@ -5,5 +5,7 @@
+
+
\ No newline at end of file
diff --git a/CSharpBible/Games/Galaxia_BaseTests/Galaxia_BaseTests.csproj b/CSharpBible/Games/Galaxia_BaseTests/Galaxia_BaseTests.csproj
index a53a4c3b2..a994bb297 100644
--- a/CSharpBible/Games/Galaxia_BaseTests/Galaxia_BaseTests.csproj
+++ b/CSharpBible/Games/Galaxia_BaseTests/Galaxia_BaseTests.csproj
@@ -22,4 +22,9 @@
+
+
+
+
+
diff --git a/CSharpBible/Games/Galaxia_UI.Tests/Galaxia_UI.Tests.csproj b/CSharpBible/Games/Galaxia_UI.Tests/Galaxia_UI.Tests.csproj
index 467326d3a..f021ee2da 100644
--- a/CSharpBible/Games/Galaxia_UI.Tests/Galaxia_UI.Tests.csproj
+++ b/CSharpBible/Games/Galaxia_UI.Tests/Galaxia_UI.Tests.csproj
@@ -13,4 +13,7 @@
+
+
+
\ No newline at end of file
diff --git a/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj b/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj
index dd0719b76..ee0a2795c 100644
--- a/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj
+++ b/CSharpBible/Games/Galaxia_UI/Galaxia_UI.csproj
@@ -15,9 +15,14 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/CSharpBible/Games/Game_Base/Game_Base.csproj b/CSharpBible/Games/Game_Base/Game_Base.csproj
index e6e47afcc..f5968e276 100644
--- a/CSharpBible/Games/Game_Base/Game_Base.csproj
+++ b/CSharpBible/Games/Game_Base/Game_Base.csproj
@@ -15,11 +15,15 @@
-
+
+
+
+
+
diff --git a/CSharpBible/Games/Game_BaseTests/Game_BaseTests.csproj b/CSharpBible/Games/Game_BaseTests/Game_BaseTests.csproj
index 3cfc29c04..d4819430a 100644
--- a/CSharpBible/Games/Game_BaseTests/Game_BaseTests.csproj
+++ b/CSharpBible/Games/Game_BaseTests/Game_BaseTests.csproj
@@ -20,4 +20,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/HexaBan_Console/HexaBan_Console.csproj b/CSharpBible/Games/HexaBan_Console/HexaBan_Console.csproj
index a922e806a..02938bb78 100644
--- a/CSharpBible/Games/HexaBan_Console/HexaBan_Console.csproj
+++ b/CSharpBible/Games/HexaBan_Console/HexaBan_Console.csproj
@@ -20,4 +20,7 @@
+
+
+
diff --git a/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleLnx.csproj b/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleLnx.csproj
index 2a82b663c..b86e174c3 100644
--- a/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleLnx.csproj
+++ b/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleLnx.csproj
@@ -16,5 +16,8 @@
+
+
+
diff --git a/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleWin.csproj b/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleWin.csproj
index 15f4d4809..3ce8e3c75 100644
--- a/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleWin.csproj
+++ b/CSharpBible/Games/HexaBan_Console/HexaBan_ConsoleWin.csproj
@@ -16,5 +16,8 @@
+
+
+
diff --git a/CSharpBible/Games/MVVM_TiledDisplay_net/MVVM_TiledDisplay_net.csproj b/CSharpBible/Games/MVVM_TiledDisplay_net/MVVM_TiledDisplay_net.csproj
index 2689139f2..695194ea0 100644
--- a/CSharpBible/Games/MVVM_TiledDisplay_net/MVVM_TiledDisplay_net.csproj
+++ b/CSharpBible/Games/MVVM_TiledDisplay_net/MVVM_TiledDisplay_net.csproj
@@ -24,5 +24,8 @@
+
+
+
diff --git a/CSharpBible/Games/MidiSwing.MVVM/MidiSwing.MVVM.csproj b/CSharpBible/Games/MidiSwing.MVVM/MidiSwing.MVVM.csproj
index fb8e4cf3a..d19a10fc5 100644
--- a/CSharpBible/Games/MidiSwing.MVVM/MidiSwing.MVVM.csproj
+++ b/CSharpBible/Games/MidiSwing.MVVM/MidiSwing.MVVM.csproj
@@ -20,4 +20,9 @@
+
+
+
+
+
diff --git a/CSharpBible/Games/RemoteTerminal.Tests/RemoteTerminal.Tests.csproj b/CSharpBible/Games/RemoteTerminal.Tests/RemoteTerminal.Tests.csproj
index 3620db949..73433b0d9 100644
--- a/CSharpBible/Games/RemoteTerminal.Tests/RemoteTerminal.Tests.csproj
+++ b/CSharpBible/Games/RemoteTerminal.Tests/RemoteTerminal.Tests.csproj
@@ -24,4 +24,8 @@
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.AITests/SharpHack.AITests.csproj b/CSharpBible/Games/SharpHack.AITests/SharpHack.AITests.csproj
index 59561df96..81b090d9d 100644
--- a/CSharpBible/Games/SharpHack.AITests/SharpHack.AITests.csproj
+++ b/CSharpBible/Games/SharpHack.AITests/SharpHack.AITests.csproj
@@ -27,4 +27,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.Base/SharpHack.Base.csproj b/CSharpBible/Games/SharpHack.Base/SharpHack.Base.csproj
index 49b654132..05017359d 100644
--- a/CSharpBible/Games/SharpHack.Base/SharpHack.Base.csproj
+++ b/CSharpBible/Games/SharpHack.Base/SharpHack.Base.csproj
@@ -17,4 +17,8 @@
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.BaseItemsTests/SharpHack.BaseItemsTests.csproj b/CSharpBible/Games/SharpHack.BaseItemsTests/SharpHack.BaseItemsTests.csproj
index d6e9103be..d561581a1 100644
--- a/CSharpBible/Games/SharpHack.BaseItemsTests/SharpHack.BaseItemsTests.csproj
+++ b/CSharpBible/Games/SharpHack.BaseItemsTests/SharpHack.BaseItemsTests.csproj
@@ -34,4 +34,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.BaseTests/SharpHack.BaseTests.csproj b/CSharpBible/Games/SharpHack.BaseTests/SharpHack.BaseTests.csproj
index ba89292ed..5576323fe 100644
--- a/CSharpBible/Games/SharpHack.BaseTests/SharpHack.BaseTests.csproj
+++ b/CSharpBible/Games/SharpHack.BaseTests/SharpHack.BaseTests.csproj
@@ -35,4 +35,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.CombatTests/SharpHack.CombatTests.csproj b/CSharpBible/Games/SharpHack.CombatTests/SharpHack.CombatTests.csproj
index f483ab9fd..960851cb0 100644
--- a/CSharpBible/Games/SharpHack.CombatTests/SharpHack.CombatTests.csproj
+++ b/CSharpBible/Games/SharpHack.CombatTests/SharpHack.CombatTests.csproj
@@ -34,4 +34,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.EngineTests/SharpHack.EngineTests.csproj b/CSharpBible/Games/SharpHack.EngineTests/SharpHack.EngineTests.csproj
index 57f9bc0b9..008e3f5c5 100644
--- a/CSharpBible/Games/SharpHack.EngineTests/SharpHack.EngineTests.csproj
+++ b/CSharpBible/Games/SharpHack.EngineTests/SharpHack.EngineTests.csproj
@@ -36,4 +36,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.LevelGenTests/SharpHack.LevelGenTests.csproj b/CSharpBible/Games/SharpHack.LevelGenTests/SharpHack.LevelGenTests.csproj
index 7764ff80e..2495cf219 100644
--- a/CSharpBible/Games/SharpHack.LevelGenTests/SharpHack.LevelGenTests.csproj
+++ b/CSharpBible/Games/SharpHack.LevelGenTests/SharpHack.LevelGenTests.csproj
@@ -35,4 +35,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.MapExport/SharpHack.MapExport.csproj b/CSharpBible/Games/SharpHack.MapExport/SharpHack.MapExport.csproj
index 367b8ee67..18a69a976 100644
--- a/CSharpBible/Games/SharpHack.MapExport/SharpHack.MapExport.csproj
+++ b/CSharpBible/Games/SharpHack.MapExport/SharpHack.MapExport.csproj
@@ -27,4 +27,8 @@
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.View.FirstPerson/SharpHack.View.FirstPerson.csproj b/CSharpBible/Games/SharpHack.View.FirstPerson/SharpHack.View.FirstPerson.csproj
index 421bb029a..e52bcb88f 100644
--- a/CSharpBible/Games/SharpHack.View.FirstPerson/SharpHack.View.FirstPerson.csproj
+++ b/CSharpBible/Games/SharpHack.View.FirstPerson/SharpHack.View.FirstPerson.csproj
@@ -36,4 +36,9 @@
+
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.ViewModel.Tests/SharpHack.ViewModel.Tests.csproj b/CSharpBible/Games/SharpHack.ViewModel.Tests/SharpHack.ViewModel.Tests.csproj
index 3e7db26ab..14c48956d 100644
--- a/CSharpBible/Games/SharpHack.ViewModel.Tests/SharpHack.ViewModel.Tests.csproj
+++ b/CSharpBible/Games/SharpHack.ViewModel.Tests/SharpHack.ViewModel.Tests.csproj
@@ -10,7 +10,10 @@
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
@@ -19,4 +22,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.ViewModel/LayeredGameViewModel.cs b/CSharpBible/Games/SharpHack.ViewModel/LayeredGameViewModel.cs
index b5e7f5134..29e84d037 100644
--- a/CSharpBible/Games/SharpHack.ViewModel/LayeredGameViewModel.cs
+++ b/CSharpBible/Games/SharpHack.ViewModel/LayeredGameViewModel.cs
@@ -2,12 +2,15 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using SharpHack.Base.Data;
using SharpHack.Base.Interfaces;
using SharpHack.Base.Model;
using SharpHack.Engine;
+using SharpHack.Engine.Pathfinding;
namespace SharpHack.ViewModel;
@@ -22,10 +25,19 @@ public sealed record LayeredEntity(LayeredEntityKind Kind, DisplayTile Tile, str
public sealed record LayeredCell(DisplayTile Structure, IReadOnlyList Entities);
+public enum LayeredTileHoverAction
+{
+ None,
+ GoTo,
+ Pickup,
+ ToggleDoor
+}
+
public partial class LayeredGameViewModel : ObservableObject
{
private readonly GameSession _session;
private LayeredCell[] _cells;
+ private CancellationTokenSource? _goCts;
private int _viewOffsetX;
private int _viewOffsetY;
@@ -141,6 +153,7 @@ private void UpdateCells()
var map = Map;
var player = Player;
var playerPos = player.Position;
+ var cells = new LayeredCell[ViewWidth * ViewHeight];
int maxOffsetX = Math.Max(0, map.Width - ViewWidth);
int maxOffsetY = Math.Max(0, map.Height - ViewHeight);
@@ -162,7 +175,7 @@ private void UpdateCells()
if (!rowInBounds || mapX < 0 || mapX >= map.Width)
{
- _cells[index] = new LayeredCell(DisplayTile.Empty, Array.Empty());
+ cells[index] = new LayeredCell(DisplayTile.Empty, Array.Empty());
index++;
continue;
}
@@ -170,7 +183,7 @@ private void UpdateCells()
var tile = map[mapX, mapY];
if (!tile.IsExplored)
{
- _cells[index] = new LayeredCell(DisplayTile.Empty, Array.Empty());
+ cells[index] = new LayeredCell(DisplayTile.Empty, Array.Empty());
index++;
continue;
}
@@ -192,11 +205,12 @@ private void UpdateCells()
var structure = CreateStructureTile(tile, surWall);
var entities = CreateEntities(tile, isPlayer: mapX == playerPos.X && mapY == playerPos.Y);
- _cells[index] = new LayeredCell(structure, entities);
+ cells[index] = new LayeredCell(structure, entities);
index++;
}
}
+ _cells = cells;
OnPropertyChanged(nameof(PrimaryActionHint));
}
@@ -293,6 +307,36 @@ private static IReadOnlyList CreateEntities(ITile tile, bool isPl
return list;
}
+ private bool IsEnemyNearPlayer()
+ {
+ var pp = Player.Position;
+ return Enemies.Any(e =>
+ {
+ int dx = Math.Abs(e.Position.X - pp.X);
+ int dy = Math.Abs(e.Position.Y - pp.Y);
+ return dx <= 1 && dy <= 1;
+ });
+ }
+
+ private static Direction? TryGetDirection(Point from, Point to)
+ {
+ int dx = Math.Clamp(to.X - from.X, -1, 1);
+ int dy = Math.Clamp(to.Y - from.Y, -1, 1);
+
+ return (dx, dy) switch
+ {
+ (0, -1) => Direction.North,
+ (0, 1) => Direction.South,
+ (-1, 0) => Direction.West,
+ (1, 0) => Direction.East,
+ (-1, -1) => Direction.NorthWest,
+ (1, -1) => Direction.NorthEast,
+ (-1, 1) => Direction.SouthWest,
+ (1, 1) => Direction.SouthEast,
+ _ => null
+ };
+ }
+
private void NotifyMiniMapIfChanged()
{
var current = _session.MiniMap;
@@ -309,6 +353,157 @@ public void RefreshMiniMap()
OnPropertyChanged(nameof(MiniMap));
}
+ public LayeredTileHoverAction GetHoverActionForView(Point targetView)
+ {
+ var world = new Point(targetView.X + ViewOffsetX, targetView.Y + ViewOffsetY);
+ if (!Map.IsValid(world))
+ {
+ return LayeredTileHoverAction.None;
+ }
+
+ var tile = Map[world];
+ if (!tile.IsExplored)
+ {
+ return LayeredTileHoverAction.None;
+ }
+
+ var playerPosition = Player.Position;
+ bool adjacent = Math.Abs(world.X - playerPosition.X) <= 1 && Math.Abs(world.Y - playerPosition.Y) <= 1;
+
+ if (adjacent && (tile.Type == TileType.DoorClosed || tile.Type == TileType.DoorOpen))
+ {
+ return LayeredTileHoverAction.ToggleDoor;
+ }
+
+ if (adjacent && tile.Items.Count == 1)
+ {
+ var item = tile.Items[0];
+ if (item is not IContainerItem)
+ {
+ return LayeredTileHoverAction.Pickup;
+ }
+ }
+
+ if (tile.IsWalkable)
+ {
+ return LayeredTileHoverAction.GoTo;
+ }
+
+ return LayeredTileHoverAction.None;
+ }
+
+ [RelayCommand]
+ public void ToggleDoorAtView(Point targetView)
+ {
+ if (GetHoverActionForView(targetView) != LayeredTileHoverAction.ToggleDoor)
+ {
+ return;
+ }
+
+ var world = new Point(targetView.X + ViewOffsetX, targetView.Y + ViewOffsetY);
+ if (_session.ToggleDoorAt(world))
+ {
+ UpdateCells();
+ UpdateStats();
+ OnPropertyChanged(nameof(Cells));
+ NotifyMiniMapIfChanged();
+ }
+ }
+
+ [RelayCommand]
+ public void PickupAtView(Point targetView)
+ {
+ if (GetHoverActionForView(targetView) != LayeredTileHoverAction.Pickup)
+ {
+ return;
+ }
+
+ var world = new Point(targetView.X + ViewOffsetX, targetView.Y + ViewOffsetY);
+ var tile = Map[world];
+ if (tile.Items.Count != 1)
+ {
+ return;
+ }
+
+ _session.PickUpItem(Player, tile.Items[0], autoEquip: AutoEquip);
+ UpdateInventory();
+ UpdateCells();
+ UpdateStats();
+ OnPropertyChanged(nameof(Cells));
+ NotifyMiniMapIfChanged();
+ }
+
+ public bool CanClickGoToView(Point targetView)
+ {
+ return GetHoverActionForView(targetView) == LayeredTileHoverAction.GoTo;
+ }
+
+ [RelayCommand]
+ public async Task GoToViewAsync(Point targetView)
+ {
+ if (!CanClickGoToView(targetView))
+ {
+ return;
+ }
+
+ var targetWorld = new Point(targetView.X + ViewOffsetX, targetView.Y + ViewOffsetY);
+ await GoToWorldAsync(targetWorld);
+ }
+
+ [RelayCommand]
+ public async Task GoToWorldAsync(Point targetWorld)
+ {
+ if (!Map.IsValid(targetWorld))
+ {
+ return;
+ }
+
+ _goCts?.Cancel();
+ _goCts = new CancellationTokenSource();
+ var token = _goCts.Token;
+
+ while (!token.IsCancellationRequested)
+ {
+ if (Player.Position == targetWorld)
+ {
+ break;
+ }
+
+ if (IsEnemyNearPlayer())
+ {
+ break;
+ }
+
+ if (!Map.IsValid(targetWorld) || !Map[targetWorld].IsExplored || !Map[targetWorld].IsWalkable)
+ {
+ break;
+ }
+
+ var start = Player.Position;
+ var path = AStarPathfinder.FindPath(
+ Map,
+ start,
+ targetWorld,
+ canEnter: p => Map[p].IsExplored && Map[p].IsWalkable);
+
+ if (path is null || path.Count < 2)
+ {
+ break;
+ }
+
+ var next = path[1];
+ var direction = TryGetDirection(start, next);
+ if (direction is null)
+ {
+ break;
+ }
+
+ Move(direction.Value);
+
+ await Task.Delay(25, token);
+ }
+ }
+
[RelayCommand]
public void Move(Direction direction)
{
diff --git a/CSharpBible/Games/SharpHack.ViewModel/SharpHack.ViewModel.csproj b/CSharpBible/Games/SharpHack.ViewModel/SharpHack.ViewModel.csproj
index a91381296..5a6b9379f 100644
--- a/CSharpBible/Games/SharpHack.ViewModel/SharpHack.ViewModel.csproj
+++ b/CSharpBible/Games/SharpHack.ViewModel/SharpHack.ViewModel.csproj
@@ -15,4 +15,8 @@
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.WPF2D/Converters/TopEntityTileConverter.cs b/CSharpBible/Games/SharpHack.WPF2D/Converters/TopEntityTileConverter.cs
new file mode 100644
index 000000000..2c110c747
--- /dev/null
+++ b/CSharpBible/Games/SharpHack.WPF2D/Converters/TopEntityTileConverter.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Windows;
+using System.Windows.Data;
+using SharpHack.ViewModel;
+using SharpHack.Wpf.Services;
+
+namespace SharpHack.WPF2D.Converters;
+
+public sealed class TopEntityTileConverter : Freezable, IValueConverter
+{
+ public static readonly DependencyProperty TileServiceProperty = DependencyProperty.Register(
+ nameof(TileService),
+ typeof(ITileService),
+ typeof(TopEntityTileConverter),
+ new PropertyMetadata(null));
+
+ public ITileService? TileService
+ {
+ get => (ITileService?)GetValue(TileServiceProperty);
+ set => SetValue(TileServiceProperty, value);
+ }
+
+ protected override Freezable CreateInstanceCore() => new TopEntityTileConverter();
+
+ public object? Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is not IReadOnlyList entities || entities.Count == 0)
+ {
+ return null;
+ }
+
+ return TileService?.GetTile(entities[0].Tile);
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ => throw new NotSupportedException();
+}
diff --git a/CSharpBible/Games/SharpHack.WPF2D/MainWindow.xaml b/CSharpBible/Games/SharpHack.WPF2D/MainWindow.xaml
index 351b41f5c..52742912b 100644
--- a/CSharpBible/Games/SharpHack.WPF2D/MainWindow.xaml
+++ b/CSharpBible/Games/SharpHack.WPF2D/MainWindow.xaml
@@ -2,14 +2,19 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:conv="clr-namespace:SharpHack.WPF2D.Converters"
- Title="SharpHack.WPF2D" Height="720" Width="1024">
+ Title="SharpHack.WPF2D" Height="720" Width="1024"
+ Focusable="True"
+ Loaded="OnWindowLoaded"
+ PreviewKeyDown="OnWindowPreviewKeyDown">
-
+
+
+
@@ -27,7 +32,11 @@
-
+
@@ -36,15 +45,49 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.WPF2D/MainWindow.xaml.cs b/CSharpBible/Games/SharpHack.WPF2D/MainWindow.xaml.cs
index ea37bf1af..0bc48524c 100644
--- a/CSharpBible/Games/SharpHack.WPF2D/MainWindow.xaml.cs
+++ b/CSharpBible/Games/SharpHack.WPF2D/MainWindow.xaml.cs
@@ -1,6 +1,11 @@
+using System;
using SharpHack.WPF2D.ViewModels;
+using SharpHack.WPF2D.Converters;
+using SharpHack.Base.Model;
using SharpHack.Wpf.Services;
using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Input;
namespace SharpHack.WPF2D;
@@ -9,6 +14,8 @@ namespace SharpHack.WPF2D;
///
public partial class MainWindow : Window
{
+ private readonly MainViewModel _viewModel;
+
public ITileService TileService { get; }
///
@@ -18,8 +25,167 @@ public partial class MainWindow : Window
public MainWindow(MainViewModel vm, ITileService tileService)
{
InitializeComponent();
+ _viewModel = vm;
TileService = tileService;
TileService.LoadTileset("tileset_cutout3.png", tileSize: 96);
+
+ if (Resources["TileToImageConverter"] is TileToImageConverter converter)
+ {
+ converter.TileService = TileService;
+ }
+
+ if (Resources["TopEntityTileConverter"] is TopEntityTileConverter topEntityConverter)
+ {
+ topEntityConverter.TileService = TileService;
+ }
+
DataContext = vm;
}
+
+ private void OnWindowLoaded(object sender, RoutedEventArgs e)
+ {
+ Focus();
+ Keyboard.Focus(this);
+ }
+
+ private void OnWindowPreviewKeyDown(object sender, KeyEventArgs e)
+ {
+ bool handled = e.Key switch
+ {
+ Key.Up => TryMove(Direction.North),
+ Key.Down => TryMove(Direction.South),
+ Key.Left => TryMove(Direction.West),
+ Key.Right => TryMove(Direction.East),
+ Key.NumPad7 => TryMove(Direction.NorthWest),
+ Key.NumPad9 => TryMove(Direction.NorthEast),
+ Key.NumPad1 => TryMove(Direction.SouthWest),
+ Key.NumPad3 => TryMove(Direction.SouthEast),
+ Key.Space => TryExecutePrimaryAction(),
+ Key.Enter => TryExecutePrimaryAction(),
+ _ => false
+ };
+
+ if (handled)
+ {
+ e.Handled = true;
+ }
+ }
+
+ private async void OnMapMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
+ {
+ if (sender is not ItemsControl itemsControl)
+ {
+ return;
+ }
+
+ if (_viewModel.Game.ViewWidth <= 0 || _viewModel.Game.ViewHeight <= 0 || itemsControl.ActualWidth <= 0 || itemsControl.ActualHeight <= 0)
+ {
+ return;
+ }
+
+ var position = e.GetPosition(itemsControl);
+ double cellWidth = itemsControl.ActualWidth / _viewModel.Game.ViewWidth;
+ double cellHeight = itemsControl.ActualHeight / _viewModel.Game.ViewHeight;
+
+ if (cellWidth <= 0 || cellHeight <= 0)
+ {
+ return;
+ }
+
+ int viewX = Math.Clamp((int)(position.X / cellWidth), 0, _viewModel.Game.ViewWidth - 1);
+ int viewY = Math.Clamp((int)(position.Y / cellHeight), 0, _viewModel.Game.ViewHeight - 1);
+
+ var targetView = new SharpHack.Base.Model.Point(viewX, viewY);
+ var action = _viewModel.Game.GetHoverActionForView(targetView);
+
+ if (action == SharpHack.ViewModel.LayeredTileHoverAction.ToggleDoor)
+ {
+ _viewModel.Game.ToggleDoorAtView(targetView);
+ }
+ else if (action == SharpHack.ViewModel.LayeredTileHoverAction.Pickup)
+ {
+ _viewModel.Game.PickupAtView(targetView);
+ }
+ else if (action == SharpHack.ViewModel.LayeredTileHoverAction.GoTo)
+ {
+ await _viewModel.Game.GoToViewAsync(targetView);
+ }
+
+ Focus();
+ Keyboard.Focus(this);
+ e.Handled = true;
+ }
+
+ private void OnMapMouseMove(object sender, MouseEventArgs e)
+ {
+ if (sender is not ItemsControl itemsControl)
+ {
+ Mouse.OverrideCursor = null;
+ return;
+ }
+
+ if (!TryGetViewPoint(itemsControl, e.GetPosition(itemsControl), out var targetView))
+ {
+ Mouse.OverrideCursor = null;
+ return;
+ }
+
+ var action = _viewModel.Game.GetHoverActionForView(targetView);
+ Mouse.OverrideCursor = action switch
+ {
+ SharpHack.ViewModel.LayeredTileHoverAction.ToggleDoor => Cursors.SizeWE,
+ SharpHack.ViewModel.LayeredTileHoverAction.GoTo => Cursors.Hand,
+ SharpHack.ViewModel.LayeredTileHoverAction.Pickup => Cursors.Hand,
+ _ => Cursors.No
+ };
+ }
+
+ private void OnMapMouseLeave(object sender, MouseEventArgs e)
+ {
+ Mouse.OverrideCursor = null;
+ }
+
+ private bool TryMove(Direction direction)
+ {
+ if (!_viewModel.Game.MoveCommand.CanExecute(direction))
+ {
+ return false;
+ }
+
+ _viewModel.Game.MoveCommand.Execute(direction);
+ return true;
+ }
+
+ private bool TryExecutePrimaryAction()
+ {
+ if (!_viewModel.Game.ExecutePrimaryActionCommand.CanExecute(null))
+ {
+ return false;
+ }
+
+ _viewModel.Game.ExecutePrimaryActionCommand.Execute(null);
+ return true;
+ }
+
+ private bool TryGetViewPoint(ItemsControl itemsControl, System.Windows.Point position, out SharpHack.Base.Model.Point targetView)
+ {
+ targetView = default;
+
+ if (_viewModel.Game.ViewWidth <= 0 || _viewModel.Game.ViewHeight <= 0 || itemsControl.ActualWidth <= 0 || itemsControl.ActualHeight <= 0)
+ {
+ return false;
+ }
+
+ double cellWidth = itemsControl.ActualWidth / _viewModel.Game.ViewWidth;
+ double cellHeight = itemsControl.ActualHeight / _viewModel.Game.ViewHeight;
+ if (cellWidth <= 0 || cellHeight <= 0)
+ {
+ return false;
+ }
+
+ int viewX = Math.Clamp((int)(position.X / cellWidth), 0, _viewModel.Game.ViewWidth - 1);
+ int viewY = Math.Clamp((int)(position.Y / cellHeight), 0, _viewModel.Game.ViewHeight - 1);
+ targetView = new SharpHack.Base.Model.Point(viewX, viewY);
+ return true;
+ }
}
diff --git a/CSharpBible/Games/SharpHack.WPF2D/SharpHack.WPF2D.csproj b/CSharpBible/Games/SharpHack.WPF2D/SharpHack.WPF2D.csproj
index 56a428353..73bc3d2e5 100644
--- a/CSharpBible/Games/SharpHack.WPF2D/SharpHack.WPF2D.csproj
+++ b/CSharpBible/Games/SharpHack.WPF2D/SharpHack.WPF2D.csproj
@@ -39,4 +39,9 @@
+
+
+
+
+
diff --git a/CSharpBible/Games/SharpHack.WPF2D/ViewModels/MainViewModel.cs b/CSharpBible/Games/SharpHack.WPF2D/ViewModels/MainViewModel.cs
index c5d3c81ff..7169a51a6 100644
--- a/CSharpBible/Games/SharpHack.WPF2D/ViewModels/MainViewModel.cs
+++ b/CSharpBible/Games/SharpHack.WPF2D/ViewModels/MainViewModel.cs
@@ -1,8 +1,13 @@
-using CommunityToolkit.Mvvm.ComponentModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using CommunityToolkit.Mvvm.ComponentModel;
using SharpHack.ViewModel;
namespace SharpHack.WPF2D.ViewModels;
+public sealed record TilePaletteEntry(DisplayTile Tile, string Name, int Index);
+
///
/// Main window view model.
///
@@ -15,10 +20,16 @@ public sealed partial class MainViewModel : ObservableObject
public MainViewModel(LayeredGameViewModel game)
{
Game = game;
+ TilePalette = Enum.GetValues()
+ .OrderBy(tile => (int)tile)
+ .Select(tile => new TilePaletteEntry(tile, tile.ToString(), (int)tile))
+ .ToArray();
}
///
/// Gets the game view model.
///
public LayeredGameViewModel Game { get; }
+
+ public IReadOnlyList TilePalette { get; }
}
diff --git a/CSharpBible/Games/SharpHack.Wpf/Services/TileService.cs b/CSharpBible/Games/SharpHack.Wpf/Services/TileService.cs
index 7e4bd9bc7..2f8742f67 100644
--- a/CSharpBible/Games/SharpHack.Wpf/Services/TileService.cs
+++ b/CSharpBible/Games/SharpHack.Wpf/Services/TileService.cs
@@ -126,6 +126,7 @@ private ImageSource GetEmptyTile()
if (_emptyTile is not null)
{
return _emptyTile;
+
}
EnsureLoaded();
diff --git a/CSharpBible/Games/SharpHack.Wpf/SharpHack.Wpf.csproj b/CSharpBible/Games/SharpHack.Wpf/SharpHack.Wpf.csproj
index b5e483086..743ff3c2c 100644
--- a/CSharpBible/Games/SharpHack.Wpf/SharpHack.Wpf.csproj
+++ b/CSharpBible/Games/SharpHack.Wpf/SharpHack.Wpf.csproj
@@ -29,5 +29,8 @@
+
+
+
diff --git a/CSharpBible/Games/Snake.WPF/Snake.WPF.csproj b/CSharpBible/Games/Snake.WPF/Snake.WPF.csproj
index 656d3036d..600ca84b0 100644
--- a/CSharpBible/Games/Snake.WPF/Snake.WPF.csproj
+++ b/CSharpBible/Games/Snake.WPF/Snake.WPF.csproj
@@ -25,4 +25,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/Snake_Base/Snake_Base.csproj b/CSharpBible/Games/Snake_Base/Snake_Base.csproj
index fde558f76..5dcca688c 100644
--- a/CSharpBible/Games/Snake_Base/Snake_Base.csproj
+++ b/CSharpBible/Games/Snake_Base/Snake_Base.csproj
@@ -19,5 +19,9 @@
+
+
+
+
diff --git a/CSharpBible/Games/Snake_BaseTests/Snake_BaseTests.csproj b/CSharpBible/Games/Snake_BaseTests/Snake_BaseTests.csproj
index e38a5e387..cc23ba46b 100644
--- a/CSharpBible/Games/Snake_BaseTests/Snake_BaseTests.csproj
+++ b/CSharpBible/Games/Snake_BaseTests/Snake_BaseTests.csproj
@@ -25,4 +25,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/Snake_Console/Snake_Console.csproj b/CSharpBible/Games/Snake_Console/Snake_Console.csproj
index 0901800ee..ba3a87716 100644
--- a/CSharpBible/Games/Snake_Console/Snake_Console.csproj
+++ b/CSharpBible/Games/Snake_Console/Snake_Console.csproj
@@ -21,4 +21,8 @@
+
+
+
+
diff --git a/CSharpBible/Games/Sokoban.Plugin/Sokoban.Plugin.csproj b/CSharpBible/Games/Sokoban.Plugin/Sokoban.Plugin.csproj
index 90b251705..7a70e735d 100644
--- a/CSharpBible/Games/Sokoban.Plugin/Sokoban.Plugin.csproj
+++ b/CSharpBible/Games/Sokoban.Plugin/Sokoban.Plugin.csproj
@@ -36,8 +36,8 @@
false
runtime
-
-
+
+
@@ -58,4 +58,8 @@
+
+
+
+
diff --git a/CSharpBible/Games/Sokoban_Base/Sokoban_Base.csproj b/CSharpBible/Games/Sokoban_Base/Sokoban_Base.csproj
index 5b8e9d0c0..27e2d5afa 100644
--- a/CSharpBible/Games/Sokoban_Base/Sokoban_Base.csproj
+++ b/CSharpBible/Games/Sokoban_Base/Sokoban_Base.csproj
@@ -47,8 +47,8 @@
-
-
+
+
@@ -59,6 +59,11 @@
+
+
+
+
+
diff --git a/CSharpBible/Games/Sokoban_Base/Sokoban_Base_win.csproj b/CSharpBible/Games/Sokoban_Base/Sokoban_Base_win.csproj
index 1fa8e7542..aa3de9a51 100644
--- a/CSharpBible/Games/Sokoban_Base/Sokoban_Base_win.csproj
+++ b/CSharpBible/Games/Sokoban_Base/Sokoban_Base_win.csproj
@@ -50,9 +50,14 @@
-
+
+
+
+
+
+
diff --git a/CSharpBible/Games/Sokoban_BaseTests/Sokoban_BaseTests.csproj b/CSharpBible/Games/Sokoban_BaseTests/Sokoban_BaseTests.csproj
index 160d58545..717294772 100644
--- a/CSharpBible/Games/Sokoban_BaseTests/Sokoban_BaseTests.csproj
+++ b/CSharpBible/Games/Sokoban_BaseTests/Sokoban_BaseTests.csproj
@@ -28,4 +28,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/Sudoku_BaseTests/Sudoku_BaseTests.csproj b/CSharpBible/Games/Sudoku_BaseTests/Sudoku_BaseTests.csproj
index 0f2fac93d..8023173b8 100644
--- a/CSharpBible/Games/Sudoku_BaseTests/Sudoku_BaseTests.csproj
+++ b/CSharpBible/Games/Sudoku_BaseTests/Sudoku_BaseTests.csproj
@@ -41,4 +41,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/Tetris_BaseTests/Tetris_BaseTests.csproj b/CSharpBible/Games/Tetris_BaseTests/Tetris_BaseTests.csproj
index d0879d038..62e6b4eb9 100644
--- a/CSharpBible/Games/Tetris_BaseTests/Tetris_BaseTests.csproj
+++ b/CSharpBible/Games/Tetris_BaseTests/Tetris_BaseTests.csproj
@@ -28,4 +28,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/TileSetAnimator.Tests/TileSetAnimator.Tests.csproj b/CSharpBible/Games/TileSetAnimator.Tests/TileSetAnimator.Tests.csproj
index b0d45bcf7..91f4a927a 100644
--- a/CSharpBible/Games/TileSetAnimator.Tests/TileSetAnimator.Tests.csproj
+++ b/CSharpBible/Games/TileSetAnimator.Tests/TileSetAnimator.Tests.csproj
@@ -27,4 +27,8 @@
+
+
+
+
diff --git a/CSharpBible/Games/TileSetAnimator/TileSetAnimator.csproj b/CSharpBible/Games/TileSetAnimator/TileSetAnimator.csproj
index d28784a93..17bb109ae 100644
--- a/CSharpBible/Games/TileSetAnimator/TileSetAnimator.csproj
+++ b/CSharpBible/Games/TileSetAnimator/TileSetAnimator.csproj
@@ -31,4 +31,8 @@
Resources.Designer.cs
+
+
+
+
diff --git a/CSharpBible/Games/Treppen.Base/Treppen.Base.csproj b/CSharpBible/Games/Treppen.Base/Treppen.Base.csproj
index 63c1652ad..0c0dc98e2 100644
--- a/CSharpBible/Games/Treppen.Base/Treppen.Base.csproj
+++ b/CSharpBible/Games/Treppen.Base/Treppen.Base.csproj
@@ -16,10 +16,14 @@
$(TargetFrameworks);net10.0
-
-
+
+
+
+
+
+
diff --git a/CSharpBible/Games/Treppen.BaseTests/Treppen.BaseTests.csproj b/CSharpBible/Games/Treppen.BaseTests/Treppen.BaseTests.csproj
index e508eeed4..ad5423255 100644
--- a/CSharpBible/Games/Treppen.BaseTests/Treppen.BaseTests.csproj
+++ b/CSharpBible/Games/Treppen.BaseTests/Treppen.BaseTests.csproj
@@ -16,4 +16,8 @@
+
+
+
+
diff --git a/CSharpBible/Games/Treppen.WPF/Treppen.WPF.csproj b/CSharpBible/Games/Treppen.WPF/Treppen.WPF.csproj
index f12d6638a..5aad220f1 100644
--- a/CSharpBible/Games/Treppen.WPF/Treppen.WPF.csproj
+++ b/CSharpBible/Games/Treppen.WPF/Treppen.WPF.csproj
@@ -27,4 +27,9 @@
+
+
+
+
+
diff --git a/CSharpBible/Games/VTileEdit.WPF/VTileEdit.WPF.csproj b/CSharpBible/Games/VTileEdit.WPF/VTileEdit.WPF.csproj
index dfeed85f9..b6c52be08 100644
--- a/CSharpBible/Games/VTileEdit.WPF/VTileEdit.WPF.csproj
+++ b/CSharpBible/Games/VTileEdit.WPF/VTileEdit.WPF.csproj
@@ -46,4 +46,7 @@
Strings.resx
+
+
+
diff --git a/CSharpBible/Games/VTileEdit.WPFTests/VTileEdit.WPFTests.csproj b/CSharpBible/Games/VTileEdit.WPFTests/VTileEdit.WPFTests.csproj
index 47c34defd..76aa2d48c 100644
--- a/CSharpBible/Games/VTileEdit.WPFTests/VTileEdit.WPFTests.csproj
+++ b/CSharpBible/Games/VTileEdit.WPFTests/VTileEdit.WPFTests.csproj
@@ -31,5 +31,10 @@
+
+
+
+
+
diff --git a/CSharpBible/Games/VTileEdit/VTileEdit.csproj b/CSharpBible/Games/VTileEdit/VTileEdit.csproj
index c293c7d91..3c7fe144b 100644
--- a/CSharpBible/Games/VTileEdit/VTileEdit.csproj
+++ b/CSharpBible/Games/VTileEdit/VTileEdit.csproj
@@ -27,6 +27,8 @@
+
+
diff --git a/CSharpBible/Games/VTileEditTests/VTileEditTests.csproj b/CSharpBible/Games/VTileEditTests/VTileEditTests.csproj
index 7cc4f67ef..774bd5815 100644
--- a/CSharpBible/Games/VTileEditTests/VTileEditTests.csproj
+++ b/CSharpBible/Games/VTileEditTests/VTileEditTests.csproj
@@ -49,4 +49,9 @@
PreserveNewest
+
+
+
+
+
diff --git a/CSharpBible/Games/VectorGfx/VectorGfx.csproj b/CSharpBible/Games/VectorGfx/VectorGfx.csproj
index 8a8c66ab9..ab7aa4efe 100644
--- a/CSharpBible/Games/VectorGfx/VectorGfx.csproj
+++ b/CSharpBible/Games/VectorGfx/VectorGfx.csproj
@@ -19,7 +19,7 @@
-
+
@@ -29,4 +29,9 @@
+
+
+
+
+
diff --git a/CSharpBible/Games/VectorGfx2/VectorGfx2.csproj b/CSharpBible/Games/VectorGfx2/VectorGfx2.csproj
index 672a47586..ab7aa4efe 100644
--- a/CSharpBible/Games/VectorGfx2/VectorGfx2.csproj
+++ b/CSharpBible/Games/VectorGfx2/VectorGfx2.csproj
@@ -29,4 +29,9 @@
+
+
+
+
+
diff --git a/CSharpBible/Games/Werner_Flaschbier.Console2/Werner_Flaschbier.Console2.csproj b/CSharpBible/Games/Werner_Flaschbier.Console2/Werner_Flaschbier.Console2.csproj
index d2a6da173..1fdf2c16b 100644
--- a/CSharpBible/Games/Werner_Flaschbier.Console2/Werner_Flaschbier.Console2.csproj
+++ b/CSharpBible/Games/Werner_Flaschbier.Console2/Werner_Flaschbier.Console2.csproj
@@ -24,7 +24,11 @@
-
+
+
+
+
+
diff --git a/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Base.csproj b/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Base.csproj
index 6e6229527..b4f98c8ab 100644
--- a/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Base.csproj
+++ b/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Base.csproj
@@ -37,4 +37,9 @@
Resource1.Designer.cs
+
+
+
+
+
diff --git a/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Console.csproj b/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Console.csproj
index a866eca94..0f9330808 100644
--- a/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Console.csproj
+++ b/CSharpBible/Games/Werner_Flaschbier/Werner_Flaschbier_Console.csproj
@@ -24,7 +24,11 @@
-
+
+
+
+
+
diff --git a/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_BaseTests.csproj b/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_BaseTests.csproj
index 500af7e1c..2c24aee13 100644
--- a/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_BaseTests.csproj
+++ b/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_BaseTests.csproj
@@ -15,11 +15,11 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
@@ -27,4 +27,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_ConsoleTests.csproj b/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_ConsoleTests.csproj
index ca86c3d5b..7709cd3b3 100644
--- a/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_ConsoleTests.csproj
+++ b/CSharpBible/Games/Werner_Flaschbier_BaseTests/Werner_Flaschbier_ConsoleTests.csproj
@@ -23,4 +23,10 @@
+
+
+
+
+
+
diff --git a/CSharpBible/Graphics/All_Graphics/All_Graphics_net.csproj b/CSharpBible/Graphics/All_Graphics/All_Graphics_net.csproj
index 138d98189..674f6096e 100644
--- a/CSharpBible/Graphics/All_Graphics/All_Graphics_net.csproj
+++ b/CSharpBible/Graphics/All_Graphics/All_Graphics_net.csproj
@@ -29,8 +29,8 @@
-
-
+
+
diff --git a/CSharpBible/Graphics/CanvasWPF2_CTItemTemplateSelector/CanvasWPF2_CTItemTemplateSelector.csproj b/CSharpBible/Graphics/CanvasWPF2_CTItemTemplateSelector/CanvasWPF2_CTItemTemplateSelector.csproj
index 8192f8718..109111dde 100644
--- a/CSharpBible/Graphics/CanvasWPF2_CTItemTemplateSelector/CanvasWPF2_CTItemTemplateSelector.csproj
+++ b/CSharpBible/Graphics/CanvasWPF2_CTItemTemplateSelector/CanvasWPF2_CTItemTemplateSelector.csproj
@@ -50,8 +50,8 @@
-
-
+
+
diff --git a/CSharpBible/Graphics/CanvasWPF2_CTItemTemplateSelector/ViewModels/MainWindowViewmodel.cs b/CSharpBible/Graphics/CanvasWPF2_CTItemTemplateSelector/ViewModels/MainWindowViewmodel.cs
index 81966eb58..b208e8346 100644
--- a/CSharpBible/Graphics/CanvasWPF2_CTItemTemplateSelector/ViewModels/MainWindowViewmodel.cs
+++ b/CSharpBible/Graphics/CanvasWPF2_CTItemTemplateSelector/ViewModels/MainWindowViewmodel.cs
@@ -119,7 +119,7 @@ private void SelectShape(object? o)
private void CreateRectangle()
{
lock (Shapes)
- Shapes.Add(new ShapeData(_rnd.Next(0, 600), _rnd.Next(0, 400)) { Dx = _rnd.NextDouble() * 40 - 20, Dy = _rnd.NextDouble() * 40 - 20, SType = 0, MouseHover = Shape_MouseHover });
+ Shapes.Add(new ShapeData(_rnd.Next(0, 600), _rnd.Next(0, 400)) { Dx = _rnd.NextDouble() * 40 - 20, Dy = _rnd.NextDouble() * 40 - 20, SType = 0, MouseHover = new DelegateCommand
public partial class App : Application
{
+
+ protected override void OnStartup(StartupEventArgs e)
+ {
+ var services = new ServiceCollection();
+ ConfigureServices(services);
+ var ServiceProvider = services.BuildServiceProvider();
+ IoC.Configure(ServiceProvider);
+ base.OnStartup(e);
+ }
+
+ private static void ConfigureServices(IServiceCollection services)
+ {
+ // IoT-Service registrieren
+ services.AddSingleton();
+
+ // ViewModels registrieren
+// services.AddTransielt<>();
+ // services.AddTransient();
+ }
}
diff --git a/CSharpBible/Graphics/MVVM_Converter_CTDrawGrid/MVVM_Converter_CTDrawGrid.csproj b/CSharpBible/Graphics/MVVM_Converter_CTDrawGrid/MVVM_Converter_CTDrawGrid.csproj
index c2e13b87c..f63fda903 100644
--- a/CSharpBible/Graphics/MVVM_Converter_CTDrawGrid/MVVM_Converter_CTDrawGrid.csproj
+++ b/CSharpBible/Graphics/MVVM_Converter_CTDrawGrid/MVVM_Converter_CTDrawGrid.csproj
@@ -19,6 +19,9 @@
+
+
+
Resources.resx
diff --git a/CSharpBible/Graphics/MVVM_Converter_DrawGrid3_NonLin/MVVM_Converter_DrawGrid3_NonLin.csproj b/CSharpBible/Graphics/MVVM_Converter_DrawGrid3_NonLin/MVVM_Converter_DrawGrid3_NonLin.csproj
index 80975a8f3..2348a1f4c 100644
--- a/CSharpBible/Graphics/MVVM_Converter_DrawGrid3_NonLin/MVVM_Converter_DrawGrid3_NonLin.csproj
+++ b/CSharpBible/Graphics/MVVM_Converter_DrawGrid3_NonLin/MVVM_Converter_DrawGrid3_NonLin.csproj
@@ -21,7 +21,7 @@
-
+
diff --git a/CSharpBible/Graphics/MVVM_DynamicShape/MVVM_DynamicShape.csproj b/CSharpBible/Graphics/MVVM_DynamicShape/MVVM_DynamicShape.csproj
index 3d2cee535..4aea265d6 100644
--- a/CSharpBible/Graphics/MVVM_DynamicShape/MVVM_DynamicShape.csproj
+++ b/CSharpBible/Graphics/MVVM_DynamicShape/MVVM_DynamicShape.csproj
@@ -47,7 +47,7 @@
-
+
diff --git a/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling.csproj b/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling.csproj
index 0c4ff1f91..44b6c5324 100644
--- a/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling.csproj
+++ b/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling.csproj
@@ -9,8 +9,8 @@
-
-
+
+
diff --git a/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling_net.csproj b/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling_net.csproj
index ad03340e2..566851b93 100644
--- a/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling_net.csproj
+++ b/CSharpBible/Graphics/MVVM_ImageHandling/MVVM_ImageHandling_net.csproj
@@ -15,8 +15,8 @@
$(TargetFrameworks);net10.0-windows
-
-
+
+
diff --git a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj
index 1156dd331..f7639ad8a 100644
--- a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj
+++ b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandlingTests.csproj
@@ -10,9 +10,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj
index 9aa66cdde..1f04824af 100644
--- a/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj
+++ b/CSharpBible/Graphics/MVVM_ImageHandlingTests/MVVM_ImageHandling_netTests.csproj
@@ -15,10 +15,10 @@
$(TargetFrameworks);net10.0-windows
-
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Graphics/MVVM_Lines_on_Grid/MVVM_Lines_on_Grid.csproj b/CSharpBible/Graphics/MVVM_Lines_on_Grid/MVVM_Lines_on_Grid.csproj
index a7edf7716..f6266b057 100644
--- a/CSharpBible/Graphics/MVVM_Lines_on_Grid/MVVM_Lines_on_Grid.csproj
+++ b/CSharpBible/Graphics/MVVM_Lines_on_Grid/MVVM_Lines_on_Grid.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/CSharpBible/Graphics/MVVM_Lines_on_Grid2/MVVM_Lines_on_Grid2.csproj b/CSharpBible/Graphics/MVVM_Lines_on_Grid2/MVVM_Lines_on_Grid2.csproj
index a19f03489..af9f0829a 100644
--- a/CSharpBible/Graphics/MVVM_Lines_on_Grid2/MVVM_Lines_on_Grid2.csproj
+++ b/CSharpBible/Graphics/MVVM_Lines_on_Grid2/MVVM_Lines_on_Grid2.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/CSharpBible/Graphics/PermutationTests/PermutationTests.csproj b/CSharpBible/Graphics/PermutationTests/PermutationTests.csproj
index f4eb8a176..30fdbd46e 100644
--- a/CSharpBible/Graphics/PermutationTests/PermutationTests.csproj
+++ b/CSharpBible/Graphics/PermutationTests/PermutationTests.csproj
@@ -13,9 +13,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Graphics/PolySpline/PolySpline.csproj b/CSharpBible/Graphics/PolySpline/PolySpline.csproj
index 06455f6d5..113bed7a7 100644
--- a/CSharpBible/Graphics/PolySpline/PolySpline.csproj
+++ b/CSharpBible/Graphics/PolySpline/PolySpline.csproj
@@ -53,7 +53,7 @@
-
+
diff --git a/CSharpBible/Graphics/PolySpline/PolySpline2.csproj b/CSharpBible/Graphics/PolySpline/PolySpline2.csproj
index 7e6c564da..ef300d7be 100644
--- a/CSharpBible/Graphics/PolySpline/PolySpline2.csproj
+++ b/CSharpBible/Graphics/PolySpline/PolySpline2.csproj
@@ -21,7 +21,7 @@
-
+
diff --git a/CSharpBible/Graphics/PolySpline/PolySpline_net.csproj b/CSharpBible/Graphics/PolySpline/PolySpline_net.csproj
index 6eaec5214..27a552c49 100644
--- a/CSharpBible/Graphics/PolySpline/PolySpline_net.csproj
+++ b/CSharpBible/Graphics/PolySpline/PolySpline_net.csproj
@@ -29,7 +29,7 @@
-
+
diff --git a/CSharpBible/Graphics/Polyline/Polyline.csproj b/CSharpBible/Graphics/Polyline/Polyline.csproj
index c0e83ab57..3308c96c3 100644
--- a/CSharpBible/Graphics/Polyline/Polyline.csproj
+++ b/CSharpBible/Graphics/Polyline/Polyline.csproj
@@ -23,7 +23,7 @@
-
+
diff --git a/CSharpBible/Graphics/Polyline/Polyline2.csproj b/CSharpBible/Graphics/Polyline/Polyline2.csproj
index 1173e62ea..e5bb349cf 100644
--- a/CSharpBible/Graphics/Polyline/Polyline2.csproj
+++ b/CSharpBible/Graphics/Polyline/Polyline2.csproj
@@ -12,6 +12,6 @@
-
+
\ No newline at end of file
diff --git a/CSharpBible/Graphics/Polyline/Polyline_net.csproj b/CSharpBible/Graphics/Polyline/Polyline_net.csproj
index 8298d2952..e2f67930f 100644
--- a/CSharpBible/Graphics/Polyline/Polyline_net.csproj
+++ b/CSharpBible/Graphics/Polyline/Polyline_net.csproj
@@ -28,7 +28,7 @@
-
+
diff --git a/CSharpBible/Graphics/PrimeDisc/PrimeDisc.csproj b/CSharpBible/Graphics/PrimeDisc/PrimeDisc.csproj
index 3ec444732..bc67ad7a7 100644
--- a/CSharpBible/Graphics/PrimeDisc/PrimeDisc.csproj
+++ b/CSharpBible/Graphics/PrimeDisc/PrimeDisc.csproj
@@ -12,9 +12,10 @@
-
-
-
+
+
+
+
diff --git a/CSharpBible/Graphics/ScreenX.BaseTests/ScreenX.BaseTests.csproj b/CSharpBible/Graphics/ScreenX.BaseTests/ScreenX.BaseTests.csproj
index 8e365ef4d..72149379c 100644
--- a/CSharpBible/Graphics/ScreenX.BaseTests/ScreenX.BaseTests.csproj
+++ b/CSharpBible/Graphics/ScreenX.BaseTests/ScreenX.BaseTests.csproj
@@ -19,8 +19,11 @@
-
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
diff --git a/CSharpBible/Graphics/SuperResolutionOnnxSample/SuperResolutionOnnxSample4.csproj b/CSharpBible/Graphics/SuperResolutionOnnxSample/SuperResolutionOnnxSample4.csproj
index b2f3c4723..51f3fc755 100644
--- a/CSharpBible/Graphics/SuperResolutionOnnxSample/SuperResolutionOnnxSample4.csproj
+++ b/CSharpBible/Graphics/SuperResolutionOnnxSample/SuperResolutionOnnxSample4.csproj
@@ -6,6 +6,6 @@
enable
-
+
diff --git a/CSharpBible/Graphics/SuperResolutionOnnxSample0/SuperResolutionOnnxSample0.csproj b/CSharpBible/Graphics/SuperResolutionOnnxSample0/SuperResolutionOnnxSample0.csproj
index b2f3c4723..51f3fc755 100644
--- a/CSharpBible/Graphics/SuperResolutionOnnxSample0/SuperResolutionOnnxSample0.csproj
+++ b/CSharpBible/Graphics/SuperResolutionOnnxSample0/SuperResolutionOnnxSample0.csproj
@@ -6,6 +6,6 @@
enable
-
+
diff --git a/CSharpBible/Graphics/SuperResolutionOnnxSample1/SuperResolutionOnnxSample1.csproj b/CSharpBible/Graphics/SuperResolutionOnnxSample1/SuperResolutionOnnxSample1.csproj
index b2f3c4723..51f3fc755 100644
--- a/CSharpBible/Graphics/SuperResolutionOnnxSample1/SuperResolutionOnnxSample1.csproj
+++ b/CSharpBible/Graphics/SuperResolutionOnnxSample1/SuperResolutionOnnxSample1.csproj
@@ -6,6 +6,6 @@
enable
-
+
diff --git a/CSharpBible/Graphics/SuperResolutionOnnxSample2/SuperResolutionOnnxSample2.csproj b/CSharpBible/Graphics/SuperResolutionOnnxSample2/SuperResolutionOnnxSample2.csproj
index b2f3c4723..51f3fc755 100644
--- a/CSharpBible/Graphics/SuperResolutionOnnxSample2/SuperResolutionOnnxSample2.csproj
+++ b/CSharpBible/Graphics/SuperResolutionOnnxSample2/SuperResolutionOnnxSample2.csproj
@@ -6,6 +6,6 @@
enable
-
+
diff --git a/CSharpBible/Graphics/SuperResolutionOnnxSample3/SuperResolutionOnnxSample3.csproj b/CSharpBible/Graphics/SuperResolutionOnnxSample3/SuperResolutionOnnxSample3.csproj
index b2f3c4723..51f3fc755 100644
--- a/CSharpBible/Graphics/SuperResolutionOnnxSample3/SuperResolutionOnnxSample3.csproj
+++ b/CSharpBible/Graphics/SuperResolutionOnnxSample3/SuperResolutionOnnxSample3.csproj
@@ -6,6 +6,6 @@
enable
-
+
diff --git a/CSharpBible/Graphics/TitleGen/TitleGen.csproj b/CSharpBible/Graphics/TitleGen/TitleGen.csproj
index 8789e7511..5a474b685 100644
--- a/CSharpBible/Graphics/TitleGen/TitleGen.csproj
+++ b/CSharpBible/Graphics/TitleGen/TitleGen.csproj
@@ -10,7 +10,7 @@
-
+
diff --git a/CSharpBible/Libraries/BaseLib.Show/BaseLib.Show.csproj b/CSharpBible/Libraries/BaseLib.Show/BaseLib.Show.csproj
index 6e9ffe3ee..f70e41509 100644
--- a/CSharpBible/Libraries/BaseLib.Show/BaseLib.Show.csproj
+++ b/CSharpBible/Libraries/BaseLib.Show/BaseLib.Show.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/CSharpBible/Libraries/BaseLib/BaseLib.csproj b/CSharpBible/Libraries/BaseLib/BaseLib.csproj
index 6373fe699..5cc8cd416 100644
--- a/CSharpBible/Libraries/BaseLib/BaseLib.csproj
+++ b/CSharpBible/Libraries/BaseLib/BaseLib.csproj
@@ -30,7 +30,7 @@
-
-
+
+
\ No newline at end of file
diff --git a/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj b/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj
index 14814d5ae..1f48d0795 100644
--- a/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj
+++ b/CSharpBible/Libraries/BaseLibTests/BaseLibTests.csproj
@@ -15,8 +15,8 @@
$(TargetFrameworks);net10.0
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Libraries/ConsoleDisplay/ConsoleDisplay.csproj b/CSharpBible/Libraries/ConsoleDisplay/ConsoleDisplay.csproj
index f2efdbf2a..2ec76b128 100644
--- a/CSharpBible/Libraries/ConsoleDisplay/ConsoleDisplay.csproj
+++ b/CSharpBible/Libraries/ConsoleDisplay/ConsoleDisplay.csproj
@@ -19,10 +19,10 @@
-
-
+
+
-
+
diff --git a/CSharpBible/Libraries/ConsoleDisplayTests/ConsoleDisplayTests.csproj b/CSharpBible/Libraries/ConsoleDisplayTests/ConsoleDisplayTests.csproj
index f1c3ced99..5653aafcd 100644
--- a/CSharpBible/Libraries/ConsoleDisplayTests/ConsoleDisplayTests.csproj
+++ b/CSharpBible/Libraries/ConsoleDisplayTests/ConsoleDisplayTests.csproj
@@ -17,8 +17,8 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Libraries/ConsoleLib/ConsoleLib.csproj b/CSharpBible/Libraries/ConsoleLib/ConsoleLib.csproj
index 35dbf2f99..52dc0b6f1 100644
--- a/CSharpBible/Libraries/ConsoleLib/ConsoleLib.csproj
+++ b/CSharpBible/Libraries/ConsoleLib/ConsoleLib.csproj
@@ -24,8 +24,8 @@
-
-
+
+
diff --git a/CSharpBible/Libraries/ConsoleLib/ConsoleLib_net.csproj b/CSharpBible/Libraries/ConsoleLib/ConsoleLib_net.csproj
index e83d4067c..e92fb3487 100644
--- a/CSharpBible/Libraries/ConsoleLib/ConsoleLib_net.csproj
+++ b/CSharpBible/Libraries/ConsoleLib/ConsoleLib_net.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/CSharpBible/Libraries/ConsoleLibTests/ConsoleLibTests.csproj b/CSharpBible/Libraries/ConsoleLibTests/ConsoleLibTests.csproj
index 5790a79ff..27bb48a54 100644
--- a/CSharpBible/Libraries/ConsoleLibTests/ConsoleLibTests.csproj
+++ b/CSharpBible/Libraries/ConsoleLibTests/ConsoleLibTests.csproj
@@ -14,8 +14,8 @@
-
-
+
+
\ No newline at end of file
diff --git a/CSharpBible/Libraries/GenInterfaces/GenInterfaces.csproj b/CSharpBible/Libraries/GenInterfaces/GenInterfaces.csproj
index b870297fd..b1e09abd2 100644
--- a/CSharpBible/Libraries/GenInterfaces/GenInterfaces.csproj
+++ b/CSharpBible/Libraries/GenInterfaces/GenInterfaces.csproj
@@ -13,6 +13,6 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/CSharpBible/Libraries/MVVM_BaseLib/MVVM_BaseLib.csproj b/CSharpBible/Libraries/MVVM_BaseLib/MVVM_BaseLib.csproj
index c9b9d93fe..735ac2e43 100644
--- a/CSharpBible/Libraries/MVVM_BaseLib/MVVM_BaseLib.csproj
+++ b/CSharpBible/Libraries/MVVM_BaseLib/MVVM_BaseLib.csproj
@@ -31,8 +31,8 @@
-
-
+
+
diff --git a/CSharpBible/Libraries/MVVM_BaseLibTests/MVVM_BaseLibTests.csproj b/CSharpBible/Libraries/MVVM_BaseLibTests/MVVM_BaseLibTests.csproj
index fa72cf2bf..1b1878e72 100644
--- a/CSharpBible/Libraries/MVVM_BaseLibTests/MVVM_BaseLibTests.csproj
+++ b/CSharpBible/Libraries/MVVM_BaseLibTests/MVVM_BaseLibTests.csproj
@@ -17,13 +17,13 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/CSharpBible/Libraries/MathLibraryTests/MathLibraryTests.csproj b/CSharpBible/Libraries/MathLibraryTests/MathLibraryTests.csproj
index d8b93dba2..069fc5b3d 100644
--- a/CSharpBible/Libraries/MathLibraryTests/MathLibraryTests.csproj
+++ b/CSharpBible/Libraries/MathLibraryTests/MathLibraryTests.csproj
@@ -14,11 +14,11 @@
$(TargetFrameworks);net10.0
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/CSharpBible/Libraries/WFSystem.Data/IValueConverter.cs b/CSharpBible/Libraries/WFSystem.Data/IValueConverter.cs
index 13f8652f7..06476a917 100644
--- a/CSharpBible/Libraries/WFSystem.Data/IValueConverter.cs
+++ b/CSharpBible/Libraries/WFSystem.Data/IValueConverter.cs
@@ -15,7 +15,7 @@
namespace System.Windows.Data
{
- #if !NET6_0_OR_GREATER
+ #if !NET8_0_OR_GREATER
//
// Zusammenfassung:
// Provides a way to apply custom logic to a binding.
diff --git a/CSharpBible/Libraries/WFSystem.Data/WFSystem.Windows.Data.csproj b/CSharpBible/Libraries/WFSystem.Data/WFSystem.Windows.Data.csproj
index 33624b1e2..d91b8bee4 100644
--- a/CSharpBible/Libraries/WFSystem.Data/WFSystem.Windows.Data.csproj
+++ b/CSharpBible/Libraries/WFSystem.Data/WFSystem.Windows.Data.csproj
@@ -2,14 +2,20 @@
Library
- net481;net48;net472;net462;net6.0-windows;net7.0-windows;net8.0-windows;net9.0-windows
+ net481;net48;net472;net462;net6.0-windows;net7.0-windows;net8.0-windows
true
True
-
+
+ $(TargetFrameworks);net9.0-windows
+
+
+ $(TargetFrameworks);net10.0-windows
+
+
DEBUG;TRACE
diff --git a/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj
index c39723ade..53a0d6951 100644
--- a/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/DemoLibraryTests/DemoLibraryTests.csproj
@@ -20,9 +20,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut3/ItemsControlTut3.csproj b/CSharpBible/MVVM_Tutorial/ItemsControlTut3/ItemsControlTut3.csproj
index 63127f793..90580ce26 100644
--- a/CSharpBible/MVVM_Tutorial/ItemsControlTut3/ItemsControlTut3.csproj
+++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut3/ItemsControlTut3.csproj
@@ -25,7 +25,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj b/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj
index 6fc2a9c8c..8a961f260 100644
--- a/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut3_netTests/ItemsControlTut3_netTests.csproj
@@ -21,9 +21,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut4/ItemsControlTut4.csproj b/CSharpBible/MVVM_Tutorial/ItemsControlTut4/ItemsControlTut4.csproj
index 1db0df670..f17438ea4 100644
--- a/CSharpBible/MVVM_Tutorial/ItemsControlTut4/ItemsControlTut4.csproj
+++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut4/ItemsControlTut4.csproj
@@ -1,5 +1,5 @@
-
+
WinExe
net481;net48
@@ -25,7 +25,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj b/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj
index 65b2ce0fe..acfdc656f 100644
--- a/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/ItemsControlTut4_netTests/ItemsControlTut4_netTests.csproj
@@ -20,9 +20,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj
index c1bde3495..581f06e4c 100644
--- a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBindingTests.csproj
@@ -26,9 +26,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj
index edc0b6fef..8fb63e63c 100644
--- a/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/ListBindingTests/ListBinding_netTests.csproj
@@ -24,9 +24,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj
index 3c7481f47..5e4467243 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj
index e66af3510..5256844ca 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplate/MVVM_00_IoCTemplate_net.csproj
@@ -14,7 +14,7 @@
$(TargetFrameworks);net10.0-windows
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj
index a422005a2..2a1b37dca 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplateTests.csproj
@@ -12,9 +12,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj
index c3c583eb2..59f7913b9 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_00_IoCTemplateTests/MVVM_00_IoCTemplate_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj
index 44b502663..29197f175 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_TemplateTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj
index 940857e1f..8c8c06e44 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_00_TemplateTests/MVVM_00_Template_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj
index 7e33304e8..9dd79fc16 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplateTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj
index 2ccc59cab..29a33a664 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_00a_CTTemplateTests/MVVM_00a_CTTemplate_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj
index c037e16c3..ebf25484a 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChangeTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj
index 220143877..7ff845267 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_03_NotifyChangeTests/MVVM_03_NotifyChange_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj
index e01d0c95c..0ba77f0fb 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChangeTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj
index 935558209..53577cc5f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_03a_CTNotifyChangeTests/MVVM_03a_CTNotifyChange_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj
index 720a135d4..ff507a564 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommandTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj
index 966383f98..4e0e78d06 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_04_DelegateCommandTests/MVVM_04_DelegateCommand_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj
index 4088eae1c..b6444a223 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommandTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj
index 9919974c4..a906fe4ea 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_04a_CTRelayCommandTests/MVVM_04a_CTRelayCommand_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj
index ed128af49..0dd2d37ad 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculatorTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj
index de8dda6de..fb39e7f95 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_05_CommandParCalculatorTests/MVVM_05_CommandParCalculator_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj
index ba913da78..b51906bdd 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj
index c4b2c7eee..4d1a70be4 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalc/MVVM_05a_CTCommandParCalc_net.csproj
@@ -26,7 +26,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj
index 59211048f..d1bf6e5db 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalcTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj
index 677ee716c..b51ca7009 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_05a_CTCommandParCalcTests/MVVM_05a_CTCommandParCalc_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj
index 6d4bb929d..547cc3677 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_06_ConvertersTests/MVVM_06_ConvertersTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj
index d9afd6726..e356ca91d 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3Tests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj
index 1cd9529b8..9361e7ce9 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_3Tests/MVVM_06_Converters_3_netTests.csproj
@@ -15,9 +15,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj
index 87dc57169..a9633be1c 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4.csproj
@@ -8,8 +8,8 @@
-
-
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj
index cff294bf7..5524d6fa6 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4/MVVM_06_Converters_4_net.csproj
@@ -20,8 +20,8 @@
-
-
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj
index 90df2d2de..cc47864eb 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4Tests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj
index 340026026..58e734a50 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_06_Converters_4Tests/MVVM_06_Converters_4_netTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj
index bebfef9d2..0575df29b 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxesTest.csproj
@@ -10,9 +10,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj
index 502e239ee..a9cab3a3f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_09_DialogBoxesTest/MVVM_09_DialogBoxes_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj
index b30706aa2..5a58db3de 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxesTests.csproj
@@ -10,9 +10,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj
index 69672d00e..e41b2379b 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_09a_CTDialogBoxesTests/MVVM_09a_CTDialogBoxes_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj
index b23ad4ea9..48bb4ee75 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1Tests.csproj
@@ -11,9 +11,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj
index 59f54d24d..36df7f521 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_16_UserControl1Tests/MVVM_16_UserControl1_netTests.csproj
@@ -17,9 +17,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MVVM_17_1_CSV_Laden.csproj b/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MVVM_17_1_CSV_Laden.csproj
index 9154da05e..2cfac3dd6 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MVVM_17_1_CSV_Laden.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MVVM_17_1_CSV_Laden.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MVVM_17_1_CSV_Laden_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MVVM_17_1_CSV_Laden_net.csproj
index c17509939..21bdb2bda 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MVVM_17_1_CSV_Laden_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_Laden/MVVM_17_1_CSV_Laden_net.csproj
@@ -11,7 +11,7 @@
$(TargetFrameworks);net9.0-windows
- $(TargetFrameworks);net10.0-Windows
+ $(TargetFrameworks);net10.0-windows
@@ -22,7 +22,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/MVVM_17_1_CSV_LadenTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/MVVM_17_1_CSV_LadenTests.csproj
index fea95fd4e..4a865e481 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/MVVM_17_1_CSV_LadenTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/MVVM_17_1_CSV_LadenTests.csproj
@@ -22,9 +22,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/MVVM_17_1_CSV_Laden_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/MVVM_17_1_CSV_Laden_netTests.csproj
index 5452ccf42..19d08efae 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/MVVM_17_1_CSV_Laden_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/MVVM_17_1_CSV_Laden_netTests.csproj
@@ -24,9 +24,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/Views/Converter/WindowPortToGridLinesTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/Views/Converter/WindowPortToGridLinesTests.cs
index 323f2e8e4..779d00ae8 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/Views/Converter/WindowPortToGridLinesTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_17_1_CSV_LadenTests/Views/Converter/WindowPortToGridLinesTests.cs
@@ -54,7 +54,8 @@ public void ConvertTest(object o)
[TestMethod()]
public void GetAdjustedRectTest()
{
- var r2 = testVC.GetAdjustedRect(wp);
+ if (!wp.HasValue) return;
+ var r2 = testVC.GetAdjustedRect(wp.Value);
System.Drawing.RectangleF rExp = new(-20, -10, 40, 20);
Assert.AreEqual(rExp, r2);
}
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj
index 6451e73e0..4dfdd3e42 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_18_MultiConvertersTests/MVVM_18_MultiConvertersTests.csproj
@@ -23,9 +23,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj
index a3997c9a5..57a86e938 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterListsTests.csproj
@@ -26,9 +26,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj
index d2124e5f9..65ee32328 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_19_FilterListsTests/MVVM_19_FilterLists_netTests.csproj
@@ -24,9 +24,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MVVM_20_Sysdialogs.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MVVM_20_Sysdialogs.csproj
index 32298ff22..464ecd262 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MVVM_20_Sysdialogs.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MVVM_20_Sysdialogs.csproj
@@ -12,7 +12,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MVVM_20_Sysdialogs_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MVVM_20_Sysdialogs_net.csproj
index efb92bd69..bc2e0dbc4 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MVVM_20_Sysdialogs_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_20_Sysdialogs/MVVM_20_Sysdialogs_net.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj
index 3c372c74a..8c924a34f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_SysdialogsTests.csproj
@@ -14,9 +14,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj
index 0f040f3ea..c0d794a1f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_20_SysdialogsTests/MVVM_20_Sysdialogs_netTests.csproj
@@ -19,9 +19,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs.csproj
index db84932c4..55de3d43f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs.csproj
@@ -12,7 +12,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs_net.csproj
index 628288b03..30aea3a4c 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs_net.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs_net_2lop3rvq_wpftmp.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs_net_2lop3rvq_wpftmp.csproj
new file mode 100644
index 000000000..58476169d
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogs/MVVM_20a_CTSysdialogs_net_2lop3rvq_wpftmp.csproj
@@ -0,0 +1,270 @@
+
+
+ MVVM_20a_CTSysdialogs_net
+ ..\..\..\obj.net\MVVM_20a_CTSysdialogs_net\Debug\
+ ..\..\..\obj.net\MVVM_20a_CTSysdialogs_net\
+ C:\Projekte\CSharp\CSharpBible\MVVM_Tutorial\MVVM_20a_CTSysdialogs\..\..\..\obj.net\MVVM_20a_CTSysdialogs_net\
+ <_TargetAssemblyProjectName>MVVM_20a_CTSysdialogs_net
+ MVVM_20a_CTSysdialogs
+
+
+
+ WinExe
+ net8.0-windows;
+ true
+
+
+
+
+ $(TargetFrameworks);net9.0-windows
+
+
+ $(TargetFrameworks);net10.0-windows
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj
index 9819b5909..7e12f7251 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogsTests.csproj
@@ -14,9 +14,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj
index 056390923..936a8d244 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_20a_CTSysdialogsTests/MVVM_20a_CTSysdialogs_netTests.csproj
@@ -19,9 +19,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj
index 0852e972e..a8dc53ebf 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap.csproj
@@ -22,7 +22,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj
index f16067fff..b21d1dd89 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCap/MVVM_22_CTWpfCap_net.csproj
@@ -24,7 +24,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj
index 1ea1d3192..bb1ca4d86 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCapTests.csproj
@@ -21,9 +21,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj
index 1242bb10a..d8c560eee 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_22_CTWpfCapTests/MVVM_22_CTWpfCap_netTests.csproj
@@ -27,14 +27,14 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj
index f308cad58..bcc9aa3b9 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap.csproj
@@ -22,7 +22,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj
index 143a4dcd1..6f73cae6c 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCap/MVVM_22_WpfCap_net.csproj
@@ -25,7 +25,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj
index 4159f7ccc..35af775db 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCapTests.csproj
@@ -21,9 +21,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj
index d77c137ff..37c3f42d0 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_22_WpfCapTests/MVVM_22_WpfCap_netTests.csproj
@@ -27,9 +27,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj
index 12f2d7ccc..48ab4f8fa 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControlTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj
index a94e55177..991782059 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_24_UserControlTests/MVVM_24_UserControl_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj
index 2139c8849..21cbd56d3 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControlTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj
index 2177c45f4..95dd0e628 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_24a_CTUserControlTests/MVVM_24a_CTUserControl_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj
index f12811255..3d5c67284 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControlTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj
index 6cc6de93c..9e341687b 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_24b_UserControlTests/MVVM_24b_UserControl_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj
index a3c178ade..af908d4e1 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControlTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj
index 848923e47..f6598c4bb 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_24c_CTUserControlTests/MVVM_24c_CTUserControl_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj
index b2c0b7487..e836383c5 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit.csproj
@@ -12,7 +12,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj
index 6fe640c92..2ab5d2c5b 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEdit/MVVM_25_RichTextEdit_net.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj
index 95577d21b..359adc09d 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEditTests.csproj
@@ -12,9 +12,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj
index 097444a75..a3531ab17 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_25_RichTextEditTests/MVVM_25_RichTextEdit_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj
index 7168c8160..4ccea3be3 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGridTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj
index a7c31ba43..c8e78398f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_27_DataGridTests/MVVM_27_DataGrid_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj
index 6b99adaed..18ea995a8 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt.csproj
@@ -8,8 +8,8 @@
-
-
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj
index 88ec7f6f1..05a39703f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExt/MVVM_28_1_CTDataGridExt_net.csproj
@@ -14,8 +14,8 @@
$(TargetFrameworks);net10.0-windows
-
-
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj
index ba30b0d73..773b705a5 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExtTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj
index 4c76b4eb5..11fe0ae4f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_CTDataGridExtTests/MVVM_28_1_CTDataGridExt_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MVVM_28_1_DataGridExt.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MVVM_28_1_DataGridExt.csproj
index 1f93b44d6..da7dd2fcc 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MVVM_28_1_DataGridExt.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MVVM_28_1_DataGridExt.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MVVM_28_1_DataGridExt_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MVVM_28_1_DataGridExt_net.csproj
index 58ab144d0..31171e799 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MVVM_28_1_DataGridExt_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExt/MVVM_28_1_DataGridExt_net.csproj
@@ -14,7 +14,7 @@
$(TargetFrameworks);net10.0-windows
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj
index 1dc603e3d..6553b86aa 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExtTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj
index 640a185be..cf5b8647e 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_1_DataGridExtTests/MVVM_28_1_DataGridExt_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj
index 0edc15686..8812629b6 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGridTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj
index 4e714a0cb..50e2f6024 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_28_DataGridTests/MVVM_28_DataGrid_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj
index 424a3e532..68082acd7 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1Tests.csproj
@@ -7,9 +7,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj
index 7d3ae5bb6..4785ab214 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation1Tests/MVVM_31_Validation1_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj
index 25a553ff0..8f9de4130 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2Tests.csproj
@@ -7,9 +7,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj
index 71969662c..7c21a1218 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_31_Validation2Tests/MVVM_31_Validation2_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj
index 47c86cdef..0a549b66a 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1Tests.csproj
@@ -7,9 +7,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj
index 9e9e198a1..aebb0b923 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation1Tests/MVVM_31a_CTValidation1_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj
index b6db9d3e4..f9ea6de1f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2Tests.csproj
@@ -7,9 +7,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj
index 9a2f318c5..d851a61b7 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation2Tests/MVVM_31a_CTValidation2_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj
index 71253b930..94bdce556 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3Tests.csproj
@@ -7,9 +7,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj
index 220bee23a..25b763c27 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_31a_CTValidation3Tests/MVVM_31a_CTValidation3_netTests.csproj
@@ -13,9 +13,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MVVM_33_Events_to_Commands.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MVVM_33_Events_to_Commands.csproj
index 7b52773c4..6c407ea7f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MVVM_33_Events_to_Commands.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MVVM_33_Events_to_Commands.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MVVM_33_Events_to_Commands_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MVVM_33_Events_to_Commands_net.csproj
index 86a86da84..cc5ea2ceb 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MVVM_33_Events_to_Commands_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_Commands/MVVM_33_Events_to_Commands_net.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj
index 24d08561d..1e5bd2d9e 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_CommandsTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj
index 27a55d3ff..9ce5ef1f4 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_33_Events_to_CommandsTests/MVVM_33_Events_to_Commands_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MVVM_33a_CTEvents_To_Commands.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MVVM_33a_CTEvents_To_Commands.csproj
index b9688b88b..5511da36b 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MVVM_33a_CTEvents_To_Commands.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MVVM_33a_CTEvents_To_Commands.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MVVM_33a_CTEvents_To_Commands_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MVVM_33a_CTEvents_To_Commands_net.csproj
index f2565aa41..5ef4f9875 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MVVM_33a_CTEvents_To_Commands_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_Commands/MVVM_33a_CTEvents_To_Commands_net.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj
index eb685f48a..4a51157b2 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_CommandsTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj
index a0508bfe1..15a4aa2e6 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_33a_CTEvents_To_CommandsTests/MVVM_33a_CTEvents_To_Commands_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MVVM_34_BindingEventArgs.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MVVM_34_BindingEventArgs.csproj
index 7b52773c4..6c407ea7f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MVVM_34_BindingEventArgs.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MVVM_34_BindingEventArgs.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MVVM_34_BindingEventArgs_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MVVM_34_BindingEventArgs_net.csproj
index 4d5b98bdf..9ae6f72fb 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MVVM_34_BindingEventArgs_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgs/MVVM_34_BindingEventArgs_net.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj
index 62c2e2cd3..94907d6f1 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgsTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj
index df2e4ccd3..ad29cb97f 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_34_BindingEventArgsTests/MVVM_34_BindingEventArgs_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MVVM_34a_CTBindingEventArgs.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MVVM_34a_CTBindingEventArgs.csproj
index b9688b88b..5511da36b 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MVVM_34a_CTBindingEventArgs.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MVVM_34a_CTBindingEventArgs.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MVVM_34a_CTBindingEventArgs_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MVVM_34a_CTBindingEventArgs_net.csproj
index f2565aa41..5ef4f9875 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MVVM_34a_CTBindingEventArgs_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgs/MVVM_34a_CTBindingEventArgs_net.csproj
@@ -17,7 +17,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj
index 9691804ce..993514e27 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgsTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj
index add9dfeac..1b818a002 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_34a_CTBindingEventArgsTests/MVVM_34a_CTBindingEventArgs_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/MVVM_35_CommunityToolkit_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/MVVM_35_CommunityToolkit_net.csproj
index 00543db25..e99d90ebf 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/MVVM_35_CommunityToolkit_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkit/MVVM_35_CommunityToolkit_net.csproj
@@ -14,7 +14,7 @@
$(TargetFrameworks);net10.0-windows
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj
index 2dd4473d8..c43eb6aa1 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkitTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj
index 110a6259a..5a89e15eb 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_35_CommunityToolkitTests/MVVM_35_CommunityToolkit_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj
index 2e913048f..d53bc43db 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj
index a72f56fd8..005243115 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWork/MVVM_36_ComToolKtSavesWork_net.csproj
@@ -14,7 +14,7 @@
$(TargetFrameworks);net10.0-windows
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj
index f5fa918b2..46f57db6b 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWorkTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj
index 0e749f566..18f6a9cdc 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_36_ComToolKtSavesWorkTests/MVVM_36_ComToolKtSavesWork_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj
index 6869499f0..2a8eca84a 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView.csproj
@@ -12,8 +12,8 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj
index d15636a3d..fc49dd2a0 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeView/MVVM_37_TreeView_net.csproj
@@ -14,8 +14,8 @@
$(TargetFrameworks);net10.0-windows
-
-
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj
index 55693ff25..5bc71e553 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeViewTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj
index 17943e71e..905c79d62 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_37_TreeViewTests/MVVM_37_TreeView_netTests.csproj
@@ -14,9 +14,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj
index 3c7481f47..5e4467243 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj
index e9f634db4..1cc071f2c 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjection/MVVM_38_CTDependencyInjection_net.csproj
@@ -14,7 +14,7 @@
$(TargetFrameworks);net10.0-windows
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj
index 8362eebe9..edcf9ccdc 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjectionTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj
index 119b941e9..a379bac56 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_38_CTDependencyInjectionTests/MVVM_38_CTDependencyInjection_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj
index de94dd1e8..bcf1b6e63 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj
index 6f1de9401..04dd5ee11 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTest/MVVM_39_MultiModelTest_net.csproj
@@ -14,7 +14,7 @@
$(TargetFrameworks);net10.0-windows
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj
index 2c95ba9a5..947224dfe 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTestTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj
index fae8b29e7..b2c947c22 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_39_MultiModelTestTests/MVVM_39_MultiModelTest_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj
index 23d428f83..d359905dd 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard.csproj
@@ -20,7 +20,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj
index 853708582..14944939e 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_Wizzard/MVVM_40_Wizzard_net.csproj
@@ -22,7 +22,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj
index b9303a2d6..970204376 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_WizzardTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj
index ea014dc80..e9a14a578 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/MVVM_40_Wizzard_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ViewModels/Page1ViewModelTests.cs b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ViewModels/Page1ViewModelTests.cs
index e143a84cd..ff1856d14 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ViewModels/Page1ViewModelTests.cs
+++ b/CSharpBible/MVVM_Tutorial/MVVM_40_WizzardTests/ViewModels/Page1ViewModelTests.cs
@@ -24,6 +24,7 @@
using MVVM_40_Wizzard.Models.Interfaces;
using static BaseLib.Helper.TestHelper;
using System.Globalization;
+using CommunityToolkit.Mvvm.Messaging;
///
/// The Tests namespace.
@@ -40,6 +41,7 @@ public class Page1ViewModelTests:BaseTestViewModel
{
private const string csMainSel = "MainSelection{0}";
private IWizzardModel? _model;
+ private IMessenger? _messenger;
#pragma warning disable CS8618 // Ein Non-Nullable-Feld muss beim Beenden des Konstruktors einen Wert ungleich NULL enthalten. Erwägen Sie die Deklaration als Nullable.
private CultureInfo _cc;
#pragma warning restore CS8618 // Ein Non-Nullable-Feld muss beim Beenden des Konstruktors einen Wert ungleich NULL enthalten. Erwägen Sie die Deklaration als Nullable.
@@ -54,6 +56,7 @@ public override void Init()
IoC.GetReqSrv=(t)=>t switch
{
Type _t when _t == typeof(IWizzardModel) => _model ??= Substitute.For(),
+ Type _t when _t == typeof(IMessenger) => _messenger ??= Substitute.For(),
_ => throw new NotImplementedException($"No setup for type {t} in IoC")
};
base.Init();
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj
index ba8ab394c..e5088fdde 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj
index 64e1992e8..abcbd9dcb 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_41_Sudoku/MVVM_41_Sudoku_net.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj
index 29135105e..1ec679375 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_SudokuTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj
index e1c6519cb..be49c2ab0 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_41_SudokuTests/MVVM_41_Sudoku_netTests.csproj
@@ -16,9 +16,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_42_3DView.sln b/CSharpBible/MVVM_Tutorial/MVVM_42_3DView.sln
new file mode 100644
index 000000000..4e6b76195
--- /dev/null
+++ b/CSharpBible/MVVM_Tutorial/MVVM_42_3DView.sln
@@ -0,0 +1,82 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 18
+VisualStudioVersion = 18.2.11415.280 d18.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Projektmappenelemente", "{658BD492-33FF-4995-AAE7-4F6894E92F0C}"
+ ProjectSection(SolutionItems) = preProject
+ MVVM_Tutorial.props = MVVM_Tutorial.props
+ MVVM_Tutorial_net.props = MVVM_Tutorial_net.props
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_BaseLib", "..\Libraries\MVVM_BaseLib\MVVM_BaseLib.csproj", "{890CF504-3814-443B-9EE6-E8BCACF68203}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{AF041458-CF94-4D6D-BB0F-8BC50F4F099C}"
+ ProjectSection(SolutionItems) = preProject
+ ..\Libraries\Libraries_net.props = ..\Libraries\Libraries_net.props
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVVM_BaseLibTests", "..\Libraries\MVVM_BaseLibTests\MVVM_BaseLibTests.csproj", "{66EB60F2-523D-47C8-95EA-C7E10759E239}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_42_3DView", "MVVM_42_3DView\MVVM_42_3DView.csproj", "{03610EB8-51A0-BFAB-D8A6-DE2339E8425D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_42_3DView _net", "MVVM_42_3DView\MVVM_42_3DView _net.csproj", "{61994990-80FA-86EC-4AA8-F81C6DAA30CD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_42a_3DView", "MVVM_42a_3DView\MVVM_42a_3DView.csproj", "{7D0E4FF3-478E-D8E5-DDC6-D118D3DB0C49}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_42a_3DView_net", "MVVM_42a_3DView\MVVM_42a_3DView_net.csproj", "{E082775F-8D6B-CF9C-350E-C8FE3A49C519}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_42b_3DView", "MVVM_42b_3DView\MVVM_42b_3DView.csproj", "{AD151734-FEE4-8025-BDD0-31A0495F2C4A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVVM_42b_3DView_net", "MVVM_42b_3DView\MVVM_42b_3DView_net.csproj", "{86B0CDD6-2DEE-3323-839A-C3907CEB2596}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {890CF504-3814-443B-9EE6-E8BCACF68203}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {890CF504-3814-443B-9EE6-E8BCACF68203}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {890CF504-3814-443B-9EE6-E8BCACF68203}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {890CF504-3814-443B-9EE6-E8BCACF68203}.Release|Any CPU.Build.0 = Release|Any CPU
+ {66EB60F2-523D-47C8-95EA-C7E10759E239}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {66EB60F2-523D-47C8-95EA-C7E10759E239}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {66EB60F2-523D-47C8-95EA-C7E10759E239}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {66EB60F2-523D-47C8-95EA-C7E10759E239}.Release|Any CPU.Build.0 = Release|Any CPU
+ {03610EB8-51A0-BFAB-D8A6-DE2339E8425D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {03610EB8-51A0-BFAB-D8A6-DE2339E8425D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {03610EB8-51A0-BFAB-D8A6-DE2339E8425D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {03610EB8-51A0-BFAB-D8A6-DE2339E8425D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {61994990-80FA-86EC-4AA8-F81C6DAA30CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {61994990-80FA-86EC-4AA8-F81C6DAA30CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {61994990-80FA-86EC-4AA8-F81C6DAA30CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {61994990-80FA-86EC-4AA8-F81C6DAA30CD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7D0E4FF3-478E-D8E5-DDC6-D118D3DB0C49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7D0E4FF3-478E-D8E5-DDC6-D118D3DB0C49}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7D0E4FF3-478E-D8E5-DDC6-D118D3DB0C49}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7D0E4FF3-478E-D8E5-DDC6-D118D3DB0C49}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E082775F-8D6B-CF9C-350E-C8FE3A49C519}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E082775F-8D6B-CF9C-350E-C8FE3A49C519}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E082775F-8D6B-CF9C-350E-C8FE3A49C519}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E082775F-8D6B-CF9C-350E-C8FE3A49C519}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AD151734-FEE4-8025-BDD0-31A0495F2C4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AD151734-FEE4-8025-BDD0-31A0495F2C4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AD151734-FEE4-8025-BDD0-31A0495F2C4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AD151734-FEE4-8025-BDD0-31A0495F2C4A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {86B0CDD6-2DEE-3323-839A-C3907CEB2596}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {86B0CDD6-2DEE-3323-839A-C3907CEB2596}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {86B0CDD6-2DEE-3323-839A-C3907CEB2596}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {86B0CDD6-2DEE-3323-839A-C3907CEB2596}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {890CF504-3814-443B-9EE6-E8BCACF68203} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C}
+ {66EB60F2-523D-47C8-95EA-C7E10759E239} = {AF041458-CF94-4D6D-BB0F-8BC50F4F099C}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {FDFAA7DD-8D69-4264-A5D4-C3AEBBD82D25}
+ EndGlobalSection
+EndGlobal
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_42_3DView/MVVM_42_3DView _net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_42_3DView/MVVM_42_3DView _net.csproj
index 7f700a0e9..85d98095a 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_42_3DView/MVVM_42_3DView _net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_42_3DView/MVVM_42_3DView _net.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_42_3DView/MVVM_42_3DView.csproj b/CSharpBible/MVVM_Tutorial/MVVM_42_3DView/MVVM_42_3DView.csproj
index a5f7107a4..400139901 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_42_3DView/MVVM_42_3DView.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_42_3DView/MVVM_42_3DView.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_42a_3DView/MVVM_42a_3DView.csproj b/CSharpBible/MVVM_Tutorial/MVVM_42a_3DView/MVVM_42a_3DView.csproj
index a5f7107a4..400139901 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_42a_3DView/MVVM_42a_3DView.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_42a_3DView/MVVM_42a_3DView.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_42a_3DView/MVVM_42a_3DView_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_42a_3DView/MVVM_42a_3DView_net.csproj
index e68c33b6f..b269cff1a 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_42a_3DView/MVVM_42a_3DView_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_42a_3DView/MVVM_42a_3DView_net.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/App.xaml b/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/App.xaml
index bb5022d3a..d19011109 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/App.xaml
+++ b/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/App.xaml
@@ -1,9 +1,8 @@
-
-
-
-
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/MVVM_42b_3DView.csproj b/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/MVVM_42b_3DView.csproj
index a5f7107a4..400139901 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/MVVM_42b_3DView.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/MVVM_42b_3DView.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/MVVM_42b_3DView_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/MVVM_42b_3DView_net.csproj
index 07a9491ec..90a52f569 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/MVVM_42b_3DView_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_42b_3DView/MVVM_42b_3DView_net.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj
index 3c7481f47..5e4467243 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj
index e66af3510..5256844ca 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssue/MVVM_99_SomeIssue_net.csproj
@@ -14,7 +14,7 @@
$(TargetFrameworks);net10.0-windows
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj
index 2b1525f20..4d264360a 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssueTests.csproj
@@ -12,9 +12,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj
index c5898dac7..11bbecaaa 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_99_SomeIssueTests/MVVM_99_SomeIssue_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples.csproj
index 997f50261..906f26911 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples.csproj
@@ -8,7 +8,7 @@
-
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj
index 04e564294..630ecf517 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamples/MVVM_AllExamples_net.csproj
@@ -14,8 +14,8 @@
$(TargetFrameworks);net10.0-windows
-
-
+
+
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj
index 559fa4764..4cab9d4ab 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamplesTests.csproj
@@ -9,9 +9,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj
index f0aaf08d8..c2ea54644 100644
--- a/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/MVVM_AllExamplesTests/MVVM_AllExamples_netTests.csproj
@@ -15,9 +15,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj
index 1ff84c892..5992556ae 100644
--- a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfAppTests.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj
index ccda57ad7..1096b0747 100644
--- a/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj
+++ b/CSharpBible/MVVM_Tutorial/WpfAppTests/WpfApp_netTests.csproj
@@ -14,9 +14,9 @@
$(TargetFrameworks);net10.0-windows
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Patterns_Tutorial/Pattern_00_Template/Pattern_00_Template.csproj b/CSharpBible/Patterns_Tutorial/Pattern_00_Template/Pattern_00_Template.csproj
index 120d8328d..4612eb91c 100644
--- a/CSharpBible/Patterns_Tutorial/Pattern_00_Template/Pattern_00_Template.csproj
+++ b/CSharpBible/Patterns_Tutorial/Pattern_00_Template/Pattern_00_Template.csproj
@@ -15,7 +15,7 @@
-
+
diff --git a/CSharpBible/Patterns_Tutorial/Pattern_00_TemplateTests/Pattern_00_TemplateTests.csproj b/CSharpBible/Patterns_Tutorial/Pattern_00_TemplateTests/Pattern_00_TemplateTests.csproj
index 77c7ceebf..a2cb71ff5 100644
--- a/CSharpBible/Patterns_Tutorial/Pattern_00_TemplateTests/Pattern_00_TemplateTests.csproj
+++ b/CSharpBible/Patterns_Tutorial/Pattern_00_TemplateTests/Pattern_00_TemplateTests.csproj
@@ -13,9 +13,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Patterns_Tutorial/Pattern_01_SingletonTests/Pattern_01_SingletonTests.csproj b/CSharpBible/Patterns_Tutorial/Pattern_01_SingletonTests/Pattern_01_SingletonTests.csproj
index 44a4bad63..75b1c4af6 100644
--- a/CSharpBible/Patterns_Tutorial/Pattern_01_SingletonTests/Pattern_01_SingletonTests.csproj
+++ b/CSharpBible/Patterns_Tutorial/Pattern_01_SingletonTests/Pattern_01_SingletonTests.csproj
@@ -13,9 +13,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Patterns_Tutorial/Pattern_02_ObserverTests/Pattern_02_ObserverTests.csproj b/CSharpBible/Patterns_Tutorial/Pattern_02_ObserverTests/Pattern_02_ObserverTests.csproj
index a09f1c069..ba6b83e4e 100644
--- a/CSharpBible/Patterns_Tutorial/Pattern_02_ObserverTests/Pattern_02_ObserverTests.csproj
+++ b/CSharpBible/Patterns_Tutorial/Pattern_02_ObserverTests/Pattern_02_ObserverTests.csproj
@@ -13,9 +13,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/SomeThing/QuineTest/QuineTest.csproj b/CSharpBible/SomeThing/QuineTest/QuineTest.csproj
index 58a7d48e8..3048d1f55 100644
--- a/CSharpBible/SomeThing/QuineTest/QuineTest.csproj
+++ b/CSharpBible/SomeThing/QuineTest/QuineTest.csproj
@@ -8,8 +8,8 @@
-
-
+
+
diff --git a/CSharpBible/SomeThing/SomeThing2Tests/SomeThing2Tests.csproj b/CSharpBible/SomeThing/SomeThing2Tests/SomeThing2Tests.csproj
index 487db2ebb..5320e54d1 100644
--- a/CSharpBible/SomeThing/SomeThing2Tests/SomeThing2Tests.csproj
+++ b/CSharpBible/SomeThing/SomeThing2Tests/SomeThing2Tests.csproj
@@ -10,9 +10,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/SomeThing/SomeThing2aTests/SomeThing2aTests.csproj b/CSharpBible/SomeThing/SomeThing2aTests/SomeThing2aTests.csproj
index 9ebb563f9..de42129fe 100644
--- a/CSharpBible/SomeThing/SomeThing2aTests/SomeThing2aTests.csproj
+++ b/CSharpBible/SomeThing/SomeThing2aTests/SomeThing2aTests.csproj
@@ -10,9 +10,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/Tests/Test.csproj b/CSharpBible/Tests/Test.csproj
index ca267f37d..c6338e43d 100644
--- a/CSharpBible/Tests/Test.csproj
+++ b/CSharpBible/Tests/Test.csproj
@@ -11,9 +11,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/WPF_ContentControlStyle.csproj b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/WPF_ContentControlStyle.csproj
index ba2681dc1..c8bf461c4 100644
--- a/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/WPF_ContentControlStyle.csproj
+++ b/CSharpBible/WPFSamples_2/Styles_and_Templates/WPF_ContentControlStyle/WPF_ContentControlStyle.csproj
@@ -55,9 +55,10 @@
-
-
-
+
+
+
+
diff --git a/GenFreeWin/MdbBrowser/MdbBrowser.csproj b/GenFreeWin/MdbBrowser/MdbBrowser.csproj
index 0bfa4376e..69be7b54f 100644
--- a/GenFreeWin/MdbBrowser/MdbBrowser.csproj
+++ b/GenFreeWin/MdbBrowser/MdbBrowser.csproj
@@ -20,10 +20,10 @@
-
-
-
-
+
+
+
+
diff --git a/GenFreeWin/MdbBrowserTests/MdbBrowserTests.csproj b/GenFreeWin/MdbBrowserTests/MdbBrowserTests.csproj
index d71abd1bc..8b2e8dca0 100644
--- a/GenFreeWin/MdbBrowserTests/MdbBrowserTests.csproj
+++ b/GenFreeWin/MdbBrowserTests/MdbBrowserTests.csproj
@@ -18,9 +18,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/GenFreeWin/PlaceAuthorityConsoleDemo/PlaceAuthorityConsoleDemo.csproj b/GenFreeWin/PlaceAuthorityConsoleDemo/PlaceAuthorityConsoleDemo.csproj
index c0797af5a..7f7333367 100644
--- a/GenFreeWin/PlaceAuthorityConsoleDemo/PlaceAuthorityConsoleDemo.csproj
+++ b/GenFreeWin/PlaceAuthorityConsoleDemo/PlaceAuthorityConsoleDemo.csproj
@@ -11,7 +11,7 @@
-
-
+
+
diff --git a/GenFreeWin/VBUnObfusicator/VBUnObfusicator.csproj b/GenFreeWin/VBUnObfusicator/VBUnObfusicator.csproj
index 04841d50f..c8e9bab89 100644
--- a/GenFreeWin/VBUnObfusicator/VBUnObfusicator.csproj
+++ b/GenFreeWin/VBUnObfusicator/VBUnObfusicator.csproj
@@ -22,9 +22,9 @@
-
-
-
+
+
+
diff --git a/GenFreeWin/VBUnObfusicatorTests/VBUnObfusicatorTests.csproj b/GenFreeWin/VBUnObfusicatorTests/VBUnObfusicatorTests.csproj
index 4568962c6..99034f930 100644
--- a/GenFreeWin/VBUnObfusicatorTests/VBUnObfusicatorTests.csproj
+++ b/GenFreeWin/VBUnObfusicatorTests/VBUnObfusicatorTests.csproj
@@ -23,14 +23,14 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/TestStatements/AppWithPlugin/AppWithPlugin.csproj b/TestStatements/AppWithPlugin/AppWithPlugin.csproj
index c968f411e..fbdcc3d35 100644
--- a/TestStatements/AppWithPlugin/AppWithPlugin.csproj
+++ b/TestStatements/AppWithPlugin/AppWithPlugin.csproj
@@ -18,10 +18,10 @@
-
-
-
-
+
+
+
+
diff --git a/TestStatements/AppWithPluginTest/AppWithPluginTest.csproj b/TestStatements/AppWithPluginTest/AppWithPluginTest.csproj
index a0e26dc06..3cddb82ae 100644
--- a/TestStatements/AppWithPluginTest/AppWithPluginTest.csproj
+++ b/TestStatements/AppWithPluginTest/AppWithPluginTest.csproj
@@ -14,8 +14,8 @@
-
-
+
+
diff --git a/TestStatements/AppWithPluginWpf/AppWithPluginWpf.csproj b/TestStatements/AppWithPluginWpf/AppWithPluginWpf.csproj
index b8396bfe1..089452110 100644
--- a/TestStatements/AppWithPluginWpf/AppWithPluginWpf.csproj
+++ b/TestStatements/AppWithPluginWpf/AppWithPluginWpf.csproj
@@ -16,11 +16,11 @@
$(DefineConstants);SIGNED_BUILD
-
-
-
-
-
+
+
+
+
+
diff --git a/TestStatements/ConsoleDI.Example/ConsoleDI.Example.csproj b/TestStatements/ConsoleDI.Example/ConsoleDI.Example.csproj
index 8cd6fd19f..2b7a94fb6 100644
--- a/TestStatements/ConsoleDI.Example/ConsoleDI.Example.csproj
+++ b/TestStatements/ConsoleDI.Example/ConsoleDI.Example.csproj
@@ -11,8 +11,8 @@
-
-
+
+
diff --git a/TestStatements/HelloPlugin/HelloPlugin.csproj b/TestStatements/HelloPlugin/HelloPlugin.csproj
index 3ae5e9e9d..6125cf79c 100644
--- a/TestStatements/HelloPlugin/HelloPlugin.csproj
+++ b/TestStatements/HelloPlugin/HelloPlugin.csproj
@@ -19,7 +19,7 @@
-
+
diff --git a/TestStatements/HelloPluginTest/HelloPluginTest.csproj b/TestStatements/HelloPluginTest/HelloPluginTest.csproj
index 254a4b7c5..817ddbdf9 100644
--- a/TestStatements/HelloPluginTest/HelloPluginTest.csproj
+++ b/TestStatements/HelloPluginTest/HelloPluginTest.csproj
@@ -11,10 +11,10 @@
-
-
-
-
+
+
+
+
diff --git a/TestStatements/OtherPlugin/OtherPlugin.csproj b/TestStatements/OtherPlugin/OtherPlugin.csproj
index 4fb38ca7e..de5455086 100644
--- a/TestStatements/OtherPlugin/OtherPlugin.csproj
+++ b/TestStatements/OtherPlugin/OtherPlugin.csproj
@@ -15,7 +15,7 @@
..\snKey.snk
-
+
diff --git a/TestStatements/PluginBase/PluginBase.csproj b/TestStatements/PluginBase/PluginBase.csproj
index e504a89f5..76c4d01d1 100644
--- a/TestStatements/PluginBase/PluginBase.csproj
+++ b/TestStatements/PluginBase/PluginBase.csproj
@@ -20,6 +20,6 @@
-
+
\ No newline at end of file
diff --git a/TestStatements/TestGJKAlgTest/TestGJKAlgTest.csproj b/TestStatements/TestGJKAlgTest/TestGJKAlgTest.csproj
index 1d9cd6f6a..0e08213c1 100644
--- a/TestStatements/TestGJKAlgTest/TestGJKAlgTest.csproj
+++ b/TestStatements/TestGJKAlgTest/TestGJKAlgTest.csproj
@@ -8,8 +8,8 @@
-
-
+
+
diff --git a/TestStatements/TestStatements/TestStatements.csproj b/TestStatements/TestStatements/TestStatements.csproj
index b49ecc389..3557228da 100644
--- a/TestStatements/TestStatements/TestStatements.csproj
+++ b/TestStatements/TestStatements/TestStatements.csproj
@@ -56,10 +56,10 @@
-
+
-
-
+
+
diff --git a/TestStatements/TestStatements/TestStatements_net.csproj b/TestStatements/TestStatements/TestStatements_net.csproj
index d894e4942..7685cf79c 100644
--- a/TestStatements/TestStatements/TestStatements_net.csproj
+++ b/TestStatements/TestStatements/TestStatements_net.csproj
@@ -56,9 +56,9 @@
-
-
-
+
+
+
diff --git a/TestStatements/TestStatementsTest/TestStatementsTest.csproj b/TestStatements/TestStatementsTest/TestStatementsTest.csproj
index e38d8ee09..a7c4458c0 100644
--- a/TestStatements/TestStatementsTest/TestStatementsTest.csproj
+++ b/TestStatements/TestStatementsTest/TestStatementsTest.csproj
@@ -31,9 +31,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/TestStatements/TestStatementsTest/TestStatements_netTest.csproj b/TestStatements/TestStatementsTest/TestStatements_netTest.csproj
index 016171162..e489d2227 100644
--- a/TestStatements/TestStatementsTest/TestStatements_netTest.csproj
+++ b/TestStatements/TestStatementsTest/TestStatements_netTest.csproj
@@ -32,9 +32,9 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/Transpiler_pp/Analyzer1/Analyzer1.CodeFixes/Analyzer1.CodeFixes.csproj b/Transpiler_pp/Analyzer1/Analyzer1.CodeFixes/Analyzer1.CodeFixes.csproj
index 23ffa980a..78a71e17d 100644
--- a/Transpiler_pp/Analyzer1/Analyzer1.CodeFixes/Analyzer1.CodeFixes.csproj
+++ b/Transpiler_pp/Analyzer1/Analyzer1.CodeFixes/Analyzer1.CodeFixes.csproj
@@ -1,4 +1,4 @@
-
+
net8.0
@@ -7,7 +7,7 @@
-
+
diff --git a/Transpiler_pp/Analyzer1/Analyzer1.Test/Analyzer1.Test.csproj b/Transpiler_pp/Analyzer1/Analyzer1.Test/Analyzer1.Test.csproj
index 1a164cbc5..4a3382906 100644
--- a/Transpiler_pp/Analyzer1/Analyzer1.Test/Analyzer1.Test.csproj
+++ b/Transpiler_pp/Analyzer1/Analyzer1.Test/Analyzer1.Test.csproj
@@ -8,16 +8,16 @@
-
-
-
+
+
+
-
+
diff --git a/Transpiler_pp/Analyzer1/Analyzer1/Analyzer1.csproj b/Transpiler_pp/Analyzer1/Analyzer1/Analyzer1.csproj
index f57f4112d..98f833629 100644
--- a/Transpiler_pp/Analyzer1/Analyzer1/Analyzer1.csproj
+++ b/Transpiler_pp/Analyzer1/Analyzer1/Analyzer1.csproj
@@ -1,4 +1,4 @@
-
+
net8.0
@@ -11,11 +11,11 @@
true
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/Transpiler_pp/TranspilerLib.CSharp.Tests/TranspilerLib.CSharp.Tests.csproj b/Transpiler_pp/TranspilerLib.CSharp.Tests/TranspilerLib.CSharp.Tests.csproj
index fd126c1bc..5718b8ebc 100644
--- a/Transpiler_pp/TranspilerLib.CSharp.Tests/TranspilerLib.CSharp.Tests.csproj
+++ b/Transpiler_pp/TranspilerLib.CSharp.Tests/TranspilerLib.CSharp.Tests.csproj
@@ -20,12 +20,12 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/Transpiler_pp/TranspilerLib.DriveBASIC.Tests/Models/DriveCompilerTests.cs b/Transpiler_pp/TranspilerLib.DriveBASIC.Tests/Models/DriveCompilerTests.cs
index f231fcf9c..17f0e5a74 100644
--- a/Transpiler_pp/TranspilerLib.DriveBASIC.Tests/Models/DriveCompilerTests.cs
+++ b/Transpiler_pp/TranspilerLib.DriveBASIC.Tests/Models/DriveCompilerTests.cs
@@ -661,7 +661,9 @@ private string InvokeBuildCommand(object? parseTree, IList tokenB
var method = typeof(DriveBasic).GetMethod("BuildCommand", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
?? throw new InvalidOperationException("BuildCommand method not found.");
- var arguments = new object?[] { parseTree, tokenBuffer, level, pc, string.Empty };
+ var treeArg = parseTree is string ? new List>() : parseTree;
+
+ var arguments = new object?[] { treeArg, tokenBuffer, level, pc, string.Empty };
var result = method.Invoke(FCompiler, arguments);
errorText = arguments[4] as string ?? string.Empty;
return result?.ToString() ?? string.Empty;
diff --git a/Transpiler_pp/TranspilerLib.DriveBASIC.Tests/TranspilerLib.DriveBASIC.Tests.csproj b/Transpiler_pp/TranspilerLib.DriveBASIC.Tests/TranspilerLib.DriveBASIC.Tests.csproj
index 2d467471a..58b56ead6 100644
--- a/Transpiler_pp/TranspilerLib.DriveBASIC.Tests/TranspilerLib.DriveBASIC.Tests.csproj
+++ b/Transpiler_pp/TranspilerLib.DriveBASIC.Tests/TranspilerLib.DriveBASIC.Tests.csproj
@@ -20,12 +20,12 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/Transpiler_pp/TranspilerLib.DriveBASIC/Models/DriveCompiler.Compile.cs b/Transpiler_pp/TranspilerLib.DriveBASIC/Models/DriveCompiler.Compile.cs
index e0e0aeeb2..800f9ea47 100644
--- a/Transpiler_pp/TranspilerLib.DriveBASIC/Models/DriveCompiler.Compile.cs
+++ b/Transpiler_pp/TranspilerLib.DriveBASIC/Models/DriveCompiler.Compile.cs
@@ -16,6 +16,7 @@ public partial class Compiler
private readonly Dictionary _variablesByName = new(StringComparer.OrdinalIgnoreCase);
private readonly Dictionary _labelsByName = new(StringComparer.OrdinalIgnoreCase);
private readonly Dictionary _messageNumbers = new(StringComparer.OrdinalIgnoreCase);
+ private readonly List _messagesList = new();
private readonly Dictionary _varMax = new();
private int _maxMessage;
@@ -43,6 +44,7 @@ private void ResetStateForCompile()
_variablesByName.Clear();
_labelsByName.Clear();
_messageNumbers.Clear();
+ _messagesList.Clear();
foreach (EVarType type in Enum.GetValues(typeof(EVarType)))
{
_varMax[type] = 0;
@@ -66,28 +68,16 @@ public bool Compile()
if (_parent.Labels == null)
{
AppendLog(-1, StrLeeresLabelArray);
- _parent.Labels = new List();
- }
- else
- {
- _parent.Labels.Clear();
}
if (_parent.Messages == null)
{
AppendLog(-1, StrLeeresMessageArray);
- _parent.Messages = new List();
- }
- else
- {
- //??
- _parent.Messages.Clear();
}
if (_parent.Variables == null)
{
AppendLog(-1, StrKeinSystemVariab);
- _parent.Variables = new List();
}
ResetStateForCompile();
@@ -140,6 +130,14 @@ public bool Compile()
}
}
+ _parent.Labels = [.. _labelsByName.Values];
+
+ var vars = new List(_variablesByName.Values);
+ vars.Sort((a, b) => a.Index.CompareTo(b.Index));
+ _parent.Variables = vars;
+
+ _parent.Messages = [.. _messagesList];
+
return true;
}
}
diff --git a/Transpiler_pp/TranspilerLib.DriveBASIC/Models/DriveCompiler.Emit.cs b/Transpiler_pp/TranspilerLib.DriveBASIC/Models/DriveCompiler.Emit.cs
index ee59586ae..4a7ee0f52 100644
--- a/Transpiler_pp/TranspilerLib.DriveBASIC/Models/DriveCompiler.Emit.cs
+++ b/Transpiler_pp/TranspilerLib.DriveBASIC/Models/DriveCompiler.Emit.cs
@@ -208,7 +208,14 @@ private BCErr HandleSystemPlaceholder(int placeholderIndex, object? rawValue, Co
builder.Param1 = labelIndex >= 0 ? labelIndex : ushort.MaxValue;
return BCErr.BC_OK;
case 1:
- builder.Param1 = GetMessageNumber(text);
+ if (builder.Token == EDriveToken.tt_Nop && builder.SubToken == 3)
+ {
+ GetMessageNumber(text, builder.Param1);
+ }
+ else
+ {
+ builder.Param1 = GetMessageNumber(text);
+ }
return BCErr.BC_OK;
case 2:
builder.Param1 = GetVariableNumber(text);
@@ -270,7 +277,6 @@ private CompilerLabel EnsureLabel(string labelName)
{
label = new CompilerLabel { Name = normalized };
_labelsByName[normalized] = label;
- _parent.Labels.Add(label);
}
return label;
}
@@ -293,16 +299,19 @@ private int GetLabelIndex(string labelName, int destinationPc)
return label.Index;
}
- private int GetMessageNumber(string text)
+ private int GetMessageNumber(string text, int? forcedId = null)
{
if (string.IsNullOrWhiteSpace(text))
return 0;
var normalized = NormalizeIdentifier(text);
if (!_messageNumbers.TryGetValue(normalized, out var number))
{
- number = ++_maxMessage;
+ number = forcedId ?? ++_maxMessage;
+ if (forcedId.HasValue && forcedId.Value > _maxMessage)
+ _maxMessage = forcedId.Value;
+
_messageNumbers[normalized] = number;
- _parent.Messages.Add(text.Trim());
+ _messagesList.Add(text.Trim());
}
return number;
}
@@ -344,22 +353,10 @@ private CompilerVariable EnsureVariableEntry(string displayName, EVarType type)
Index = AllocateVarNo(type)
};
_variablesByName[normalized] = variable;
- InsertVariable(variable);
}
return variable;
}
- private void InsertVariable(CompilerVariable variable)
- {
- var list = _parent.Variables ??= new List();
- var insertIndex = 0;
- while (insertIndex < list.Count && list[insertIndex].Index <= variable.Index)
- {
- insertIndex++;
- }
- list.Insert(insertIndex, variable);
- }
-
private int AllocateVarNo(EVarType type)
{
var key = type switch
diff --git a/Transpiler_pp/TranspilerLib.IEC.Tests/TranspilerLib.IEC.Tests.csproj b/Transpiler_pp/TranspilerLib.IEC.Tests/TranspilerLib.IEC.Tests.csproj
index fb306da85..c2f9b939b 100644
--- a/Transpiler_pp/TranspilerLib.IEC.Tests/TranspilerLib.IEC.Tests.csproj
+++ b/Transpiler_pp/TranspilerLib.IEC.Tests/TranspilerLib.IEC.Tests.csproj
@@ -20,12 +20,12 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/Transpiler_pp/TranspilerLib.Pascal.Tests/TranspilerLib.Pascal.Tests.csproj b/Transpiler_pp/TranspilerLib.Pascal.Tests/TranspilerLib.Pascal.Tests.csproj
index 6e787cf0a..3af65ca10 100644
--- a/Transpiler_pp/TranspilerLib.Pascal.Tests/TranspilerLib.Pascal.Tests.csproj
+++ b/Transpiler_pp/TranspilerLib.Pascal.Tests/TranspilerLib.Pascal.Tests.csproj
@@ -20,12 +20,12 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/Transpiler_pp/TranspilerLibTests/TranspilerLibTests.csproj b/Transpiler_pp/TranspilerLibTests/TranspilerLibTests.csproj
index cdf270149..6a261503c 100644
--- a/Transpiler_pp/TranspilerLibTests/TranspilerLibTests.csproj
+++ b/Transpiler_pp/TranspilerLibTests/TranspilerLibTests.csproj
@@ -32,13 +32,13 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/Transpiler_pp/Trnsp.Show.Lfm.Tests/Trnsp.Show.Lfm.Tests.csproj b/Transpiler_pp/Trnsp.Show.Lfm.Tests/Trnsp.Show.Lfm.Tests.csproj
index f9c66ef3a..471bc8d3f 100644
--- a/Transpiler_pp/Trnsp.Show.Lfm.Tests/Trnsp.Show.Lfm.Tests.csproj
+++ b/Transpiler_pp/Trnsp.Show.Lfm.Tests/Trnsp.Show.Lfm.Tests.csproj
@@ -15,8 +15,8 @@
$(TargetFrameworks);net10.0-windows
-
-
+
+
diff --git a/Transpiler_pp/Trnsp.Show.Lfm/Trnsp.Show.Lfm.csproj b/Transpiler_pp/Trnsp.Show.Lfm/Trnsp.Show.Lfm.csproj
index dec7162b7..7943bbfb2 100644
--- a/Transpiler_pp/Trnsp.Show.Lfm/Trnsp.Show.Lfm.csproj
+++ b/Transpiler_pp/Trnsp.Show.Lfm/Trnsp.Show.Lfm.csproj
@@ -16,8 +16,8 @@
-
-
+
+
diff --git a/Transpiler_pp/Trnsp.Show.Pas.Tests/Trnsp.Show.Pas.Tests.csproj b/Transpiler_pp/Trnsp.Show.Pas.Tests/Trnsp.Show.Pas.Tests.csproj
index 2e28becb1..ab421e875 100644
--- a/Transpiler_pp/Trnsp.Show.Pas.Tests/Trnsp.Show.Pas.Tests.csproj
+++ b/Transpiler_pp/Trnsp.Show.Pas.Tests/Trnsp.Show.Pas.Tests.csproj
@@ -15,8 +15,8 @@
$(TargetFrameworks);net10.0-windows
-
-
+
+
diff --git a/Transpiler_pp/Trnsp.Show.Pas/Trnsp.Show.Pas.csproj b/Transpiler_pp/Trnsp.Show.Pas/Trnsp.Show.Pas.csproj
index 03014a16c..aa01410f6 100644
--- a/Transpiler_pp/Trnsp.Show.Pas/Trnsp.Show.Pas.csproj
+++ b/Transpiler_pp/Trnsp.Show.Pas/Trnsp.Show.Pas.csproj
@@ -16,8 +16,8 @@
-
-
+
+
diff --git a/WinAhnenNew/BaseGenClasses/BaseGenClasses.csproj b/WinAhnenNew/BaseGenClasses/BaseGenClasses.csproj
index 186cdd85d..dae8221c2 100644
--- a/WinAhnenNew/BaseGenClasses/BaseGenClasses.csproj
+++ b/WinAhnenNew/BaseGenClasses/BaseGenClasses.csproj
@@ -18,7 +18,7 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/WinAhnenNew/BaseGenClassesTests/BaseGenClassesTests.csproj b/WinAhnenNew/BaseGenClassesTests/BaseGenClassesTests.csproj
index 2058f2f20..93dafacf2 100644
--- a/WinAhnenNew/BaseGenClassesTests/BaseGenClassesTests.csproj
+++ b/WinAhnenNew/BaseGenClassesTests/BaseGenClassesTests.csproj
@@ -15,7 +15,7 @@
$(TargetFrameworks);net10.0
-
+
all
diff --git a/WinAhnenNew/WinAhnenClsTests/WinAhnenClsTests.csproj b/WinAhnenNew/WinAhnenClsTests/WinAhnenClsTests.csproj
index c248ae67f..a126a6571 100644
--- a/WinAhnenNew/WinAhnenClsTests/WinAhnenClsTests.csproj
+++ b/WinAhnenNew/WinAhnenClsTests/WinAhnenClsTests.csproj
@@ -17,13 +17,13 @@
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+