diff --git a/demo/Ursa.Demo/Converters/MenuDataTemplateSelector.cs b/demo/Ursa.Demo/Converters/MenuDataTemplateSelector.cs
new file mode 100644
index 0000000..a91b109
--- /dev/null
+++ b/demo/Ursa.Demo/Converters/MenuDataTemplateSelector.cs
@@ -0,0 +1,27 @@
+using Avalonia.Controls;
+using Avalonia.Controls.Templates;
+using Ursa.Demo.ViewModels;
+
+namespace Ursa.Demo.Converters;
+
+public class MenuDataTemplateSelector: IDataTemplate
+{
+ public IDataTemplate? MenuTemplate { get; set; }
+ public IDataTemplate? SeparatorTemplate { get; set; }
+
+ public Control? Build(object? param)
+ {
+ if (param is NavigationMenuItemViewModel vm)
+ {
+ if (vm.IsSeparator) return SeparatorTemplate?.Build(vm);
+ else return MenuTemplate?.Build(vm);
+ }
+
+ return null;
+ }
+
+ public bool Match(object? data)
+ {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/Pages/NavigationMenuDemo.axaml b/demo/Ursa.Demo/Pages/NavigationMenuDemo.axaml
index dad4c0b..414d4de 100644
--- a/demo/Ursa.Demo/Pages/NavigationMenuDemo.axaml
+++ b/demo/Ursa.Demo/Pages/NavigationMenuDemo.axaml
@@ -21,35 +21,48 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/demo/Ursa.Demo/ViewModels/NavigationMenuDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/NavigationMenuDemoViewModel.cs
index 8a394ba..4b7c0c6 100644
--- a/demo/Ursa.Demo/ViewModels/NavigationMenuDemoViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/NavigationMenuDemoViewModel.cs
@@ -25,6 +25,11 @@ public class NavigationMenuDemoViewModel: ObservableObject
}
},
new NavigationMenuItemViewModel()
+ {
+ MenuHeader = "附加功能",
+ IsSeparator = true,
+ },
+ new NavigationMenuItemViewModel()
{
MenuHeader = "任务平台",
MenuIconName = "Gear",
@@ -41,5 +46,7 @@ public class NavigationMenuItemViewModel: ObservableObject
{
public string MenuHeader { get; set; }
public string MenuIconName { get; set; }
+
+ public bool IsSeparator { get; set; }
public ObservableCollection Children { get; set; } = new();
}
\ No newline at end of file
diff --git a/src/Ursa.Themes.Semi/Controls/Navigation.axaml b/src/Ursa.Themes.Semi/Controls/Navigation.axaml
index 6b48847..5318098 100644
--- a/src/Ursa.Themes.Semi/Controls/Navigation.axaml
+++ b/src/Ursa.Themes.Semi/Controls/Navigation.axaml
@@ -297,4 +297,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa/Controls/Navigation/NavigationMenuSeparator.cs b/src/Ursa/Controls/Navigation/NavigationMenuSeparator.cs
index ba84405..164d886 100644
--- a/src/Ursa/Controls/Navigation/NavigationMenuSeparator.cs
+++ b/src/Ursa/Controls/Navigation/NavigationMenuSeparator.cs
@@ -1,6 +1,11 @@
+using Avalonia.Input;
+
namespace Ursa.Controls;
public class NavigationMenuSeparator: NavigationMenuItem
{
-
+ protected override void OnPointerPressed(PointerPressedEventArgs e)
+ {
+ e.Handled = true;
+ }
}
\ No newline at end of file