From bcf01c52c6f794abda2a0bd99ab33e435c300c99 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Fri, 23 Jun 2023 14:32:15 +0800 Subject: [PATCH] feat: implement separator. --- .../Converters/MenuDataTemplateSelector.cs | 27 +++++++ demo/Ursa.Demo/Pages/NavigationMenuDemo.axaml | 73 +++++++++++-------- .../ViewModels/NavigationMenuDemoViewModel.cs | 7 ++ .../Controls/Navigation.axaml | 36 +++++++++ .../Navigation/NavigationMenuSeparator.cs | 7 +- 5 files changed, 119 insertions(+), 31 deletions(-) create mode 100644 demo/Ursa.Demo/Converters/MenuDataTemplateSelector.cs 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