diff --git a/templates/csharp/app-prism-full/.editorconfig b/templates/csharp/app-prism-full/.editorconfig
new file mode 100644
index 0000000..5b51dee
--- /dev/null
+++ b/templates/csharp/app-prism-full/.editorconfig
@@ -0,0 +1,378 @@
+# Copyright CURRENT_YEAR COMPANY_NAME
+#
+# This EditorConfig file provides consistent coding styles and formatting structure based on
+# C# standards by Xeno Innovations for your team's projects while preserving your personal defaults.
+#
+# For more info:
+# https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/code-style-rule-options
+#
+
+# Remove the line below if you want to inherit .editorconfig settings from higher directories
+root = true
+
+[*]
+# All generic files should use MSDOS style endings, not Unix (lf)
+# end_of_line = crlf
+indent_style = space
+
+[*.{cs,csx}]
+indent_style = space
+indent_size = 4
+tab_width = 4
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.{xml,xaml,axml,axaml}]
+indent_style = space
+indent_size = 2
+charset = utf-8-bom
+trim_trailing_whitespace = true
+
+[*.json]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+
+[*.sln]
+indent_size = 2
+
+# Xml project files
+[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,projitems,shproj}]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+
+# Xml config files
+[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct}]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+
+[*.svg]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+
+# PList Files
+[*.plist]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+
+# YAML files
+[*.{yaml,yml}]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+
+# Shell script files
+[*.sh]
+end_of_line = lf
+indent_style = space
+indent_size = 2
+
+# Powershell
+[*.{ps1,psd1,psm1}]
+indent_style = space
+indent_size = 2
+trim_trailing_whitespace = true
+
+[*.md]
+indent_style = space
+indent_size = 2
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+# C# Ruleset
+[*.{cs,csx}]
+# Indentation preferences
+csharp_indent_block_contents = true
+csharp_indent_braces = false
+csharp_indent_case_contents = true
+csharp_indent_case_contents_when_block = false
+csharp_indent_labels = one_less_than_current
+csharp_indent_switch_labels = true
+
+## Formatting - new line options
+### Require braces to be on a new line for (also known as "Allman" style)
+### accessors, methods, object_collection, control_blocks, types, properties, lambdas
+csharp_new_line_before_open_brace = all
+csharp_new_line_before_catch = true
+csharp_new_line_before_else = true
+csharp_new_line_before_finally = true
+csharp_new_line_before_members_in_object_initializers = true
+csharp_new_line_before_members_in_anonymous_types = true
+csharp_new_line_between_query_expression_clauses = true
+
+## Spaces
+csharp_space_after_cast = false
+csharp_space_after_colon_in_inheritance_clause = true
+csharp_space_after_keywords_in_control_flow_statements = true
+csharp_space_before_colon_in_inheritance_clause = true
+csharp_space_before_comma = false
+csharp_space_before_dot = false
+csharp_space_before_open_square_brackets = false
+csharp_space_before_semicolon_in_for_statement = false
+csharp_space_between_method_call_empty_parameter_list_parentheses = false
+csharp_space_between_method_call_name_and_opening_parenthesis = false
+csharp_space_between_method_call_parameter_list_parentheses = false
+csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
+csharp_space_between_method_declaration_parameter_list_parentheses = false
+
+# Modifier preferences
+csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
+
+# Organize Usings
+dotnet_separate_import_directive_groups = false
+dotnet_sort_system_directives_first = true
+file_header_template = unset
+# file_header_template = Copyright Xeno Innovations, Inc. 2022\nSee the LICENSE file in the project root for more information.
+
+# this. and Me. preferences
+dotnet_style_qualification_for_event = false
+dotnet_style_qualification_for_field = false
+dotnet_style_qualification_for_method = false
+dotnet_style_qualification_for_property = false
+
+# Language keywords vs BCL types preferences
+dotnet_style_predefined_type_for_locals_parameters_members = true
+dotnet_style_predefined_type_for_member_access = true
+
+# Parentheses preferences
+dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
+dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
+dotnet_style_parentheses_in_other_operators = never_if_unnecessary
+dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity
+
+# Modifier preferences
+dotnet_style_predefined_type_for_locals_parameters_members = true
+dotnet_style_require_accessibility_modifiers = for_non_interface_members
+dotnet_style_readonly_field = true
+
+# Expression-level preferences
+dotnet_style_coalesce_expression = true
+dotnet_style_collection_initializer = true
+dotnet_style_explicit_tuple_names = true
+dotnet_style_namespace_match_folder = true
+dotnet_style_null_propagation = true
+dotnet_style_object_initializer = true
+dotnet_style_operator_placement_when_wrapping = beginning_of_line
+dotnet_style_prefer_auto_properties = true
+dotnet_style_prefer_compound_assignment = true
+dotnet_style_prefer_conditional_expression_over_assignment = true
+dotnet_style_prefer_conditional_expression_over_return = true
+dotnet_style_prefer_inferred_anonymous_type_member_names = true
+dotnet_style_prefer_inferred_tuple_names = true
+dotnet_style_prefer_is_null_check_over_reference_equality_method = true
+dotnet_style_prefer_simplified_boolean_expressions = true
+dotnet_style_prefer_simplified_interpolation = true
+
+# Parameter preferences
+dotnet_code_quality_unused_parameters = all
+
+# Suppression preferences
+dotnet_remove_unnecessary_suppression_exclusions = none
+
+# New line preferences
+#dotnet_diagnostic.IDE2000.severity = warning
+dotnet_style_allow_multiple_blank_lines_experimental = false:error
+
+# dotnet_diagnostic.IDE2001.severity = none
+csharp_style_allow_embedded_statements_on_same_line_experimental = false
+
+# dotnet_diagnostic.IDE2002.severity = warning
+csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false
+
+# dotnet_diagnostic.IDE2003.severity = error
+dotnet_style_allow_statement_immediately_after_block_experimental = false:error
+
+# Naming Conventions
+## Async methods must use "Async" suffix
+dotnet_naming_rule.async_methods_end_in_async.symbols = any_async_methods
+dotnet_naming_rule.async_methods_end_in_async.style = end_in_async
+dotnet_naming_rule.async_methods_end_in_async.severity = error
+dotnet_naming_symbols.any_async_methods.applicable_kinds = method
+dotnet_naming_symbols.any_async_methods.applicable_accessibilities = *
+dotnet_naming_symbols.any_async_methods.required_modifiers = async
+dotnet_naming_style.end_in_async.capitalization = pascal_case
+dotnet_naming_style.end_in_async.required_prefix =
+dotnet_naming_style.end_in_async.required_suffix = Async
+dotnet_naming_style.end_in_async.word_separator =
+
+## private fields must prefix with an underscore
+dotnet_naming_rule.private_members_with_underscore.symbols = private_fields
+dotnet_naming_rule.private_members_with_underscore.style = prefix_underscore
+dotnet_naming_rule.private_members_with_underscore.severity = error
+dotnet_naming_symbols.private_fields.applicable_kinds = field
+dotnet_naming_symbols.private_fields.applicable_accessibilities = private
+dotnet_naming_style.prefix_underscore.capitalization = camel_case
+dotnet_naming_style.prefix_underscore.required_prefix = _
+
+## private static fields must use PascalCase (overrides '_' based on SA1311)
+dotnet_naming_rule.private_static_field_naming.symbols = private_static_field_naming
+dotnet_naming_rule.private_static_field_naming.style = pascal_case_style
+dotnet_naming_rule.private_static_field_naming.severity = error
+dotnet_naming_symbols.private_static_field_naming.applicable_kinds = field
+dotnet_naming_symbols.private_static_field_naming.applicable_accessibilities = private
+dotnet_naming_symbols.private_static_field_naming.required_modifiers = static, readonly
+dotnet_naming_style.pascal_case_style.capitalization = pascal_case
+
+## Constant fields must use PascalCase
+dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields
+dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = error
+dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style
+dotnet_naming_symbols.constant_fields.applicable_kinds = field
+dotnet_naming_symbols.constant_fields.applicable_accessibilities = *
+dotnet_naming_symbols.constant_fields.required_modifiers = const
+dotnet_naming_style.pascal_case_style.capitalization = pascal_case
+
+## Interfaces must have an I suffix
+dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
+dotnet_naming_rule.interface_should_be_begins_with_i.severity = error
+dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
+dotnet_naming_symbols.interface.applicable_kinds = interface
+dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.interface.required_modifiers =
+dotnet_naming_style.begins_with_i.capitalization = pascal_case
+dotnet_naming_style.begins_with_i.required_prefix = I
+dotnet_naming_style.begins_with_i.required_suffix =
+dotnet_naming_style.begins_with_i.word_separator =
+
+## Types and Non-Field Members must be PascalCase
+dotnet_naming_rule.types_should_be_pascal_case.severity = error
+dotnet_naming_rule.types_should_be_pascal_case.symbols = types
+dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
+dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
+dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.types.required_modifiers =
+
+dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = error
+dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
+dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
+dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
+dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.non_field_members.required_modifiers =
+
+## Code Style Rules
+# IDE1005: Use conditional delegate call
+csharp_style_conditional_delegate_call = true
+# IDE1005: Delegate invocation can be simplified.
+dotnet_diagnostic.IDE1005.severity = warning
+# IDE1006: Naming Styles
+dotnet_diagnostic.IDE1006.severity = error
+# IDEOOO8: Use of var
+dotnet_diagnostic.IDE0008.severity = none
+# IDE0010: Add missing cases
+dotnet_diagnostic.IDE0010.severity = none
+# IDE0011: Add braces
+csharp_prefer_braces = when_multiline
+# IDE0025: Use expression body for properties
+csharp_style_expression_bodied_properties = true
+# IDE0026: Use expression body for indexers
+csharp_style_expression_bodied_indexers = true
+# IDE0027: Use expression body for accessors
+csharp_style_expression_bodied_accessors = true
+# IDE0046: Convert to conditional expression
+dotnet_diagnostic.IDE0046.severity = none
+# IDE0058: Expression value is never used
+# csharp_style_unused_value_expression_statement_preference = discard_variable
+dotnet_diagnostic.IDE0058.severity = none
+
+## Code Quality Rules
+# CA1031: Do not catch general exception types
+dotnet_diagnostic.CA1031.severity = none
+# CA1822: Mark members as static
+##dotnet_diagnostic.CA1822.severity = none
+# CA1507: Use nameof to express symbol names
+dotnet_diagnostic.CA1507.severity = error
+
+## Compiler
+# CS0618: Type or member is obsolete
+##dotnet_diagnostic.CS0618.severity = error
+dotnet_diagnostic.CS0618.severity = warning
+# CS1591: Missing XML comment for publicly visible type or member
+dotnet_diagnostic.CS1591.severity = none
+
+## StyleCop.Analyzers
+# SA1000: Keywords should be spaced correctly
+dotnet_diagnostic.SA1000.severity = error
+# SA1005: Single line comments should begin with single space
+dotnet_diagnostic.SA1005.severity = error
+# SA1008
+# SA1025: Spacing??
+# SA1101: PrefixLocalCallsWithThis
+dotnet_diagnostic.SA1101.severity = none
+# SA1116: Split parameters should start on line after declaration
+dotnet_diagnostic.SA1116.severity = none
+# SA1118: Parameter should not span multiple lines
+dotnet_diagnostic.SA1118.severity = warning
+# SA1137: Elements should have the same indentation
+dotnet_diagnostic.SA1137.severity = error
+# SA1124: Do not use regions
+dotnet_diagnostic.SA1124.severity = error
+# SA1200: UsingDirectivesMustBePlacedWithinNamespace
+dotnet_diagnostic.SA1200.severity = none
+# SA1201: Elements should appear in the correct order
+dotnet_diagnostic.SA1201.severity = error
+# SA1202: Elements should be ordered by access
+dotnet_diagnostic.SA1202.severity = error
+# SA1203: Constants should appear before fields
+dotnet_diagnostic.SA1203.severity = error
+# SA1204: Static elements should appear before instance elements
+dotnet_diagnostic.SA1204.severity = error
+# SA1214: Readonly fields should appear before non-readonly fields
+dotnet_diagnostic.SA1214.severity = error
+# SA1306: Field names should begin with lower-case letter
+dotnet_diagnostic.SA1306.severity = error
+# SA1309: FieldNamesMustNotBeginWithUnderscore
+dotnet_diagnostic.SA1309.severity = none
+# SA1313: Parameter names should begin with lower-case letter
+dotnet_diagnostic.SA1313.severity = error
+# SA1414: Tuple types in signatures should have element names
+dotnet_diagnostic.SA1414.severity = silent
+# SA1503: Braces should not be omitted
+dotnet_diagnostic.SA1503.severity = none
+# SA1505: Opening braces should not be floowed by a blank line
+dotnet_diagnostic.SA1505.severity= error
+# SA1507: Code should not contain multiple blank lines in a row
+dotnet_diagnostic.SA1507.severity = error
+# SA1508: Closing brac should not be preceded by a blank line
+dotnet_diagnostic.SA1508.severity= error
+# SA1513: Closing brace should be followed by blank line
+dotnet_diagnostic.SA1513.severity = error
+# SA1514: Element documentation header should be preceded by blank line
+dotnet_diagnostic.SA1514.severity = error
+# SA1515: Single-line comment should be preceded by blank line
+dotnet_diagnostic.SA1515.severity = warning
+# SA1516: Elements should be separated by blank line
+dotnet_diagnostic.SA1516.severity = error
+# SA1600: Elements should be documented
+dotnet_diagnostic.SA1600.severity = none
+# SA1602: Enumeration items should not be documented
+dotnet_diagnostic.SA1602.severity = none
+# SA1623: Property summary documentation should match accessors
+dotnet_diagnostic.SA1623.severity = warning
+# SA1633: FileMustHaveHeader
+dotnet_diagnostic.SA1633.severity = silent
+# SA1636: File header copyright text should match
+dotnet_diagnostic.SA1636.severity = none
+
+# Default severity for analyzer diagnostics with category 'StyleCop.CSharp.SpacingRules' SA1028: Code should not contain trailing whitespace
+dotnet_analyzer_diagnostic.category-StyleCop.CSharp.SpacingRules.severity = error
+
+dotnet_diagnostic.VSSpell001.severity = suggestion
+dotnet_diagnostic.VSSpell002.severity = none
+
+# SA0001: XML comment analysis is disabled due to project configuration
+dotnet_diagnostic.SA0001.severity = none
+
+# Ignore Generated XAML
+[*.sg.cs]
+# CS1591: Missing XML comment for publicly visible type or member
+dotnet_diagnostic.CS1591.severity = none
+dotnet_analyzer_diagnostic.CS1591.severity = none
+# generated_code = true
+
+[WindowsAppSDK-VersionInfo.cs]
+dotnet_diagnostic.CS1591.severity = none
diff --git a/templates/csharp/app-prism-full/.template.config/template.json b/templates/csharp/app-prism-full/.template.config/template.json
index f6966fe..02a436e 100644
--- a/templates/csharp/app-prism-full/.template.config/template.json
+++ b/templates/csharp/app-prism-full/.template.config/template.json
@@ -17,7 +17,7 @@
"name": "Prism.Avalonia .NET - Sample Full SideBar App",
"preferNameDirectory": true,
"shortName": "prism.avalonia.app.full",
- "sourceName": "PrismSampleMvvmApp",
+ "sourceName": "SampleApp",
"defaultName": "PrismSampleTemplate",
"tags": {
"language": "C#",
diff --git a/templates/csharp/app-prism-full/App.axaml b/templates/csharp/app-prism-full/App.axaml
index b265698..8816f4c 100644
--- a/templates/csharp/app-prism-full/App.axaml
+++ b/templates/csharp/app-prism-full/App.axaml
@@ -1,9 +1,13 @@
-
+ x:Class="SampleApp.App"
+ xmlns:local="using:SampleApp"
+ RequestedThemeVariant="Default">
+
+
+
+
\ No newline at end of file
diff --git a/templates/csharp/app-prism-full/App.axaml.cs b/templates/csharp/app-prism-full/App.axaml.cs
index aad673d..76f2424 100644
--- a/templates/csharp/app-prism-full/App.axaml.cs
+++ b/templates/csharp/app-prism-full/App.axaml.cs
@@ -1,57 +1,83 @@
-using System;
+using System.Diagnostics;
+using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
-using PrismSampleMvvmApp.ViewModels;
-using PrismSampleMvvmApp.Views;
using Prism.DryIoc;
using Prism.Ioc;
+using Prism.Modularity;
using Prism.Navigation.Regions;
-using PrismSampleMvvmApp.Services;
+using SampleApp.Services;
+using SampleApp.ViewModels;
+using SampleApp.Views;
-namespace PrismSampleMvvmApp;
+namespace SampleApp;
-public class App : PrismApplication
+public partial class App : PrismApplication
{
- public App()
- {
- Console.WriteLine("Constructor");
- }
-
public override void Initialize()
{
- Console.WriteLine("Initialize");
AvaloniaXamlLoader.Load(this);
-
+
+ // Required when overriding Initialize
base.Initialize();
}
- protected override void OnInitialized()
+ protected override AvaloniaObject CreateShell()
{
- var regionManager = Container.Resolve();
- regionManager.RegisterViewWithRegion(RegionNames.ContentRegion, typeof(DashboardView));
- regionManager.RegisterViewWithRegion(RegionNames.SidebarRegion, typeof(SidebarView));
+ Debug.WriteLine("CreateShell()");
+ return Container.Resolve();
}
-
+
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
- Console.WriteLine("RegisterTypes()");
+ Debug.WriteLine("RegisterTypes()");
+
+ // Note:
+ // SidebarView isn't listed, note we're using `AutoWireViewModel` in the View's AXAML.
+ // See the line, `prism:ViewModelLocator.AutoWireViewModel="True"`
// Services
containerRegistry.RegisterSingleton();
- // Views - Generic
- containerRegistry.Register();
- containerRegistry.Register();
-
// Views - Region Navigation
containerRegistry.RegisterForNavigation();
containerRegistry.RegisterForNavigation();
- containerRegistry.RegisterForNavigation();
+ containerRegistry.RegisterForNavigation();
+
+ // Dialogs, etc.
}
- protected override Window CreateShell()
+ /// Register optional modules in the catalog.
+ /// Module Catalog.
+ protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
- Console.WriteLine("CreateShell()");
- return Container.Resolve();
+ Debug.WriteLine("ConfigureModuleCatalog()");
+ base.ConfigureModuleCatalog(moduleCatalog);
+ }
+
+ /// Called after Initialize.
+ protected override void OnInitialized()
+ {
+ Debug.WriteLine("OnInitialized()");
+
+ // Register Views to the Region it will appear in. Don't register them in the ViewModel.
+ var regionManager = Container.Resolve();
+
+ // WARNING: Prism v11.0.0-prev4
+ // - DataTemplates MUST define a DataType or else an XAML error will be thrown
+ // - Error: DataTemplate inside of DataTemplates must have a DataType set
+ regionManager.RegisterViewWithRegion(RegionNames.ContentRegion, typeof(DashboardView));
+ regionManager.RegisterViewWithRegion(RegionNames.SidebarRegion, typeof(SidebarView));
+
+ ////regionManager.RegisterViewWithRegion(RegionNames.DynamicSettingsListRegion, typeof(Setting1View));
+ ////regionManager.RegisterViewWithRegion(RegionNames.DynamicSettingsListRegion, typeof(Setting2View));
+ }
+
+ /// Custom region adapter mappings.
+ /// Region Adapters.
+ protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings regionAdapterMappings)
+ {
+ Debug.WriteLine("ConfigureRegionAdapterMappings()");
+ regionAdapterMappings.RegisterMapping();
}
}
diff --git a/templates/csharp/app-prism-full/Assets/Prism.Avalonia.png b/templates/csharp/app-prism-full/Assets/Prism.Avalonia.png
deleted file mode 100644
index 1d1c114..0000000
Binary files a/templates/csharp/app-prism-full/Assets/Prism.Avalonia.png and /dev/null differ
diff --git a/templates/csharp/app-prism-full/Assets/logo.ico b/templates/csharp/app-prism-full/Assets/logo.ico
new file mode 100644
index 0000000..e16d84d
Binary files /dev/null and b/templates/csharp/app-prism-full/Assets/logo.ico differ
diff --git a/templates/csharp/app-prism-full/Models/-.- b/templates/csharp/app-prism-full/Models/-.-
deleted file mode 100644
index e69de29..0000000
diff --git a/templates/csharp/app-prism-full/PrismSampleMvvmApp.csproj b/templates/csharp/app-prism-full/PrismSampleMvvmApp.csproj
deleted file mode 100644
index 0fd27f3..0000000
--- a/templates/csharp/app-prism-full/PrismSampleMvvmApp.csproj
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
- WinExe
- net8.0
- enable
- true
- app.manifest
- true
- latest
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/templates/csharp/app-prism-full/Program.cs b/templates/csharp/app-prism-full/Program.cs
index 262f908..aa5cd14 100644
--- a/templates/csharp/app-prism-full/Program.cs
+++ b/templates/csharp/app-prism-full/Program.cs
@@ -1,21 +1,33 @@
-using Avalonia;
+using System;
+using System.Diagnostics.CodeAnalysis;
+using Avalonia;
-namespace PrismSampleMvvmApp;
+namespace SampleApp;
public class Program
{
- static void Main(string[] args) => BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
+ // Initialization code. Don't use any Avalonia, third-party APIs or any
+ // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
+ // yet and stuff might break.
+ [STAThread]
+ [ExcludeFromCodeCoverage]
+ public static void Main(string[] args) => BuildAvaloniaApp()
+ .StartWithClassicDesktopLifetime(args);
+ // Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()
{
var builder = AppBuilder
.Configure()
.UsePlatformDetect()
.With(new X11PlatformOptions { EnableMultiTouch = true, UseDBusMenu = true, })
- .With(new Win32PlatformOptions { })
- .LogToTrace()
+ .WithInterFont()
.UseSkia();
+#if DEBUG
+ builder.LogToTrace();
+#endif
+
return builder;
}
-}
\ No newline at end of file
+}
diff --git a/templates/csharp/app-prism-full/RegionNames.cs b/templates/csharp/app-prism-full/RegionNames.cs
index c86cf3d..5932128 100644
--- a/templates/csharp/app-prism-full/RegionNames.cs
+++ b/templates/csharp/app-prism-full/RegionNames.cs
@@ -1,8 +1,9 @@
-namespace PrismSampleMvvmApp;
+namespace SampleApp;
public static class RegionNames
{
public const string ContentRegion = "ContentRegion";
public const string FooterRegion = "FooterRegion";
public const string SidebarRegion = "SidebarRegion";
-}
\ No newline at end of file
+ public const string DynamicSettingsListRegion = "DynamicSettingsListRegion";
+}
diff --git a/templates/csharp/app-prism-full/SampleApp.csproj b/templates/csharp/app-prism-full/SampleApp.csproj
new file mode 100644
index 0000000..aab2eb9
--- /dev/null
+++ b/templates/csharp/app-prism-full/SampleApp.csproj
@@ -0,0 +1,27 @@
+
+
+ WinExe
+ net8.0
+ enable
+ true
+ app.manifest
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/csharp/app-prism-full/Services/INotificationService.cs b/templates/csharp/app-prism-full/Services/INotifictionService.cs
similarity index 65%
rename from templates/csharp/app-prism-full/Services/INotificationService.cs
rename to templates/csharp/app-prism-full/Services/INotifictionService.cs
index 1126a72..63610df 100644
--- a/templates/csharp/app-prism-full/Services/INotificationService.cs
+++ b/templates/csharp/app-prism-full/Services/INotifictionService.cs
@@ -1,13 +1,13 @@
-using System;
+using System;
using Avalonia.Controls;
-namespace PrismSampleMvvmApp.Services;
+namespace SampleApp.Services;
public interface INotificationService
{
int NotificationTimeout { get; set; }
- void SetHostWindow(Window window);
+ void SetHostWindow(TopLevel window);
void Show(string title, string message, Action? onClick = null);
-}
\ No newline at end of file
+}
diff --git a/templates/csharp/app-prism-full/Services/NotificationService.cs b/templates/csharp/app-prism-full/Services/NotifictionService.cs
similarity index 74%
rename from templates/csharp/app-prism-full/Services/NotificationService.cs
rename to templates/csharp/app-prism-full/Services/NotifictionService.cs
index 575fa51..535a994 100644
--- a/templates/csharp/app-prism-full/Services/NotificationService.cs
+++ b/templates/csharp/app-prism-full/Services/NotifictionService.cs
@@ -1,9 +1,9 @@
-using System;
+using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Notifications;
-namespace PrismSampleMvvmApp.Services;
+namespace SampleApp.Services;
public class NotificationService : INotificationService
{
@@ -13,15 +13,12 @@ public class NotificationService : INotificationService
public int NotificationTimeout
{
get => _notificationTimeout;
- set
- {
- _notificationTimeout = (value < 0) ? 0 : value;
- }
+ set => _notificationTimeout = (value < 0) ? 0 : value;
}
/// Set the host window.
/// Parent window.
- public void SetHostWindow(Window hostWindow)
+ public void SetHostWindow(TopLevel hostWindow)
{
var notificationManager = new WindowNotificationManager(hostWindow)
{
@@ -43,11 +40,11 @@ public void Show(string title, string message, Action? onClick = null)
{
nm.Show(
new Notification(
- title,
- message,
- NotificationType.Information,
- TimeSpan.FromSeconds(_notificationTimeout),
- onClick));
+ title,
+ message,
+ NotificationType.Information,
+ TimeSpan.FromSeconds(_notificationTimeout),
+ onClick));
}
}
-}
\ No newline at end of file
+}
diff --git a/templates/csharp/app-prism-full/Styles/Icons.axaml b/templates/csharp/app-prism-full/Styles/Icons.axaml
index 47e35b3..f92c78e 100644
--- a/templates/csharp/app-prism-full/Styles/Icons.axaml
+++ b/templates/csharp/app-prism-full/Styles/Icons.axaml
@@ -1,17 +1,22 @@
+
+
-
-
+
+
+
+
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/csharp/app-prism-full/Views/DashboardView.axaml.cs b/templates/csharp/app-prism-full/Views/DashboardView.axaml.cs
index 7e537de..c7b9e87 100644
--- a/templates/csharp/app-prism-full/Views/DashboardView.axaml.cs
+++ b/templates/csharp/app-prism-full/Views/DashboardView.axaml.cs
@@ -1,13 +1,26 @@
-using Avalonia;
+using Avalonia;
using Avalonia.Controls;
-using Avalonia.Markup.Xaml;
+using Prism.Ioc;
+using SampleApp.Services;
-namespace PrismSampleMvvmApp.Views;
+namespace SampleApp.Views;
+/// DashboardView.
public partial class DashboardView : UserControl
{
public DashboardView()
{
InitializeComponent();
}
+
+ protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
+ {
+ base.OnAttachedToVisualTree(e);
+
+ // Initialize the WindowNotificationManager with the "TopLevel". Previously (v0.10), MainWindow
+ var notifyService = ContainerLocator.Current.Resolve();
+#pragma warning disable CS8604 // Possible null reference argument.
+ notifyService.SetHostWindow(TopLevel.GetTopLevel(this));
+#pragma warning restore CS8604 // Possible null reference argument.
+ }
}
diff --git a/templates/csharp/app-prism-full/Views/MainWindow.axaml b/templates/csharp/app-prism-full/Views/MainWindow.axaml
index d50b131..9685c7e 100644
--- a/templates/csharp/app-prism-full/Views/MainWindow.axaml
+++ b/templates/csharp/app-prism-full/Views/MainWindow.axaml
@@ -2,19 +2,21 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:vm="using:PrismSampleMvvmApp.ViewModels"
- xmlns:views="clr-namespace:PrismSampleMvvmApp.Views"
- xmlns:core="clr-namespace:PrismSampleMvvmApp"
+ xmlns:core="clr-namespace:SampleApp;assembly=SampleApp"
xmlns:prism="http://prismlibrary.com/"
- mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
- x:Class="PrismSampleMvvmApp.Views.MainWindow"
+ xmlns:views="clr-namespace:SampleApp.Views;assembly=SampleApp"
+ xmlns:vm="clr-namespace:SampleApp.ViewModels;assembly=SampleApp"
+ mc:Ignorable="d" d:DesignWidth="700" d:DesignHeight="500"
+ x:Class="SampleApp.Views.MainWindow"
+ x:CompileBindings="True"
x:DataType="vm:MainWindowViewModel"
- prism:ViewModelLocator.AutoWireViewModel="True"
- Title="{Binding Title}"
+ Height="500" Width="700"
TransparencyLevelHint="AcrylicBlur"
- Background="Transparent">
+ Background="Transparent"
+ Icon="/Assets/logo.ico"
+ Title="{Binding Title}">
-
+
Main window view.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
-#if DEBUG
- this.AttachDevTools();
-#endif
-
- var notifyService = ContainerLocator.Current.Resolve();
- notifyService.SetHostWindow(this);
}
}
diff --git a/templates/csharp/app-prism-full/Views/SubSettingsView.axaml b/templates/csharp/app-prism-full/Views/SettingsSubView.axaml
similarity index 75%
rename from templates/csharp/app-prism-full/Views/SubSettingsView.axaml
rename to templates/csharp/app-prism-full/Views/SettingsSubView.axaml
index e827fad..c14f663 100644
--- a/templates/csharp/app-prism-full/Views/SubSettingsView.axaml
+++ b/templates/csharp/app-prism-full/Views/SettingsSubView.axaml
@@ -2,16 +2,17 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:prism="http://prismlibrary.com/"
- xmlns:vm="using:PrismSampleMvvmApp.ViewModels"
+ xmlns:vm="clr-namespace:SampleApp.ViewModels;assembly=SampleApp"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
- prism:ViewModelLocator.AutoWireViewModel="True"
- x:Class="PrismSampleMvvmApp.Views.SubSettingsView"
- x:DataType="vm:SubSettingsViewModel">
+ x:Class="SampleApp.Views.SettingsSubView"
+ x:CompileBindings="True"
+ x:DataType="vm:SettingsSubViewModel">
-
+
diff --git a/templates/csharp/app-prism-full/Views/SettingsSubView.axaml.cs b/templates/csharp/app-prism-full/Views/SettingsSubView.axaml.cs
new file mode 100644
index 0000000..130c465
--- /dev/null
+++ b/templates/csharp/app-prism-full/Views/SettingsSubView.axaml.cs
@@ -0,0 +1,13 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace SampleApp.Views;
+
+public partial class SettingsSubView : UserControl
+{
+ public SettingsSubView()
+ {
+ InitializeComponent();
+ }
+}
diff --git a/templates/csharp/app-prism-full/Views/SettingsView.axaml b/templates/csharp/app-prism-full/Views/SettingsView.axaml
index e679086..5ce0701 100644
--- a/templates/csharp/app-prism-full/Views/SettingsView.axaml
+++ b/templates/csharp/app-prism-full/Views/SettingsView.axaml
@@ -2,33 +2,28 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:prism="http://prismlibrary.com/"
- xmlns:vm="using:PrismSampleMvvmApp.ViewModels"
+ xmlns:vm="clr-namespace:SampleApp.ViewModels;assembly=SampleApp"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
- prism:ViewModelLocator.AutoWireViewModel="True"
- x:Class="PrismSampleMvvmApp.Views.SettingsView"
+ x:Class="SampleApp.Views.SettingsView"
+ x:CompileBindings="True"
x:DataType="vm:SettingsViewModel">
-
-
+
+
-
-
+
+
-
+
\ No newline at end of file
diff --git a/templates/csharp/app-prism-full/Views/SettingsView.axaml.cs b/templates/csharp/app-prism-full/Views/SettingsView.axaml.cs
index 11ffd0f..912f5c6 100644
--- a/templates/csharp/app-prism-full/Views/SettingsView.axaml.cs
+++ b/templates/csharp/app-prism-full/Views/SettingsView.axaml.cs
@@ -1,8 +1,8 @@
-using Avalonia;
+using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
-namespace PrismSampleMvvmApp.Views;
+namespace SampleApp.Views;
public partial class SettingsView : UserControl
{
diff --git a/templates/csharp/app-prism-full/Views/SidebarView.axaml b/templates/csharp/app-prism-full/Views/SidebarView.axaml
index acbd0fa..e4cf980 100644
--- a/templates/csharp/app-prism-full/Views/SidebarView.axaml
+++ b/templates/csharp/app-prism-full/Views/SidebarView.axaml
@@ -3,12 +3,13 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://prismlibrary.com/"
- xmlns:vm="using:PrismSampleMvvmApp.ViewModels"
- mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
+ xmlns:vm="clr-namespace:SampleApp.ViewModels;assembly=SampleApp"
+ mc:Ignorable="d" d:DesignWidth="200" d:DesignHeight="150"
prism:ViewModelLocator.AutoWireViewModel="True"
- Width="{Binding FlyoutWidth}"
- x:Class="PrismSampleMvvmApp.Views.SidebarView"
- x:DataType="vm:SidebarViewModel">
+ x:Class="SampleApp.Views.SidebarView"
+ x:CompileBindings="True"
+ x:DataType="vm:SidebarViewModel"
+ Width="{Binding FlyoutWidth}">