From f2073f4eb373b365d5ab0ad97d57592522d68487 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Wed, 14 Feb 2024 01:07:22 +0800 Subject: [PATCH] feat: add separator. --- demo/Ursa.Demo/Pages/NavMenuDemo.axaml | 24 ++-- .../ViewModels/NavMenuDemoViewModel.cs | 13 +- src/Ursa.Themes.Semi/Controls/NavMenu.axaml | 130 +++++------------- src/Ursa/Controls/NavMenu/NavMenuItem.cs | 15 +- 4 files changed, 71 insertions(+), 111 deletions(-) diff --git a/demo/Ursa.Demo/Pages/NavMenuDemo.axaml b/demo/Ursa.Demo/Pages/NavMenuDemo.axaml index fd3b40c..ad61228 100644 --- a/demo/Ursa.Demo/Pages/NavMenuDemo.axaml +++ b/demo/Ursa.Demo/Pages/NavMenuDemo.axaml @@ -20,13 +20,18 @@ + + + - + @@ -76,16 +85,5 @@ - - - - - - - - - - - diff --git a/demo/Ursa.Demo/ViewModels/NavMenuDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/NavMenuDemoViewModel.cs index 7da440b..ed44191 100644 --- a/demo/Ursa.Demo/ViewModels/NavMenuDemoViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/NavMenuDemoViewModel.cs @@ -19,7 +19,7 @@ public class NavMenuDemoViewModel: ObservableObject new MenuItem() { Header = "How to Contribute" }, new MenuItem() { Header = "Development Workflow" }, }}, - new MenuItem() { Header = "Design Principles" }, + new MenuItem() { Header = "Design Principles"}, new MenuItem() { Header = "Contributing", Children = { new MenuItem() { Header = "Code of Conduct" }, @@ -27,6 +27,7 @@ public class NavMenuDemoViewModel: ObservableObject new MenuItem() { Header = "Development Workflow" }, }}, }}, + new MenuItem { Header = "Controls", IsSeparator = true}, new MenuItem { Header = "Badge" }, new MenuItem { Header = "Banner" }, new MenuItem { Header = "ButtonGroup" }, @@ -57,11 +58,13 @@ public class NavMenuDemoViewModel: ObservableObject public class MenuItem { - public string? Header { get; set; } - public string? Icon { get; set; } - public int IconIndex { get; set; } - public ICommand NavigationCommand { get; set; } static Random r = new Random(); + + public string? Header { get; set; } + public int IconIndex { get; set; } + public bool IsSeparator { get; set; } + public ICommand NavigationCommand { get; set; } + public MenuItem() { NavigationCommand = new AsyncRelayCommand(OnNavigate); diff --git a/src/Ursa.Themes.Semi/Controls/NavMenu.axaml b/src/Ursa.Themes.Semi/Controls/NavMenu.axaml index b7cdd91..d174423 100644 --- a/src/Ursa.Themes.Semi/Controls/NavMenu.axaml +++ b/src/Ursa.Themes.Semi/Controls/NavMenu.axaml @@ -15,7 +15,7 @@ - + @@ -33,6 +33,7 @@ Name="PART_Border" Grid.Row="0" MinHeight="32" + Cursor="Hand" Background="{TemplateBinding u:NavMenuItem.Background}" CornerRadius="4"> - @@ -244,30 +176,44 @@ - diff --git a/src/Ursa/Controls/NavMenu/NavMenuItem.cs b/src/Ursa/Controls/NavMenu/NavMenuItem.cs index 08fed11..f2550bf 100644 --- a/src/Ursa/Controls/NavMenu/NavMenuItem.cs +++ b/src/Ursa/Controls/NavMenu/NavMenuItem.cs @@ -124,7 +124,15 @@ public class NavMenuItem: HeaderedSelectingItemsControl get => _level; set => SetAndRaise(LevelProperty, ref _level, value); } - + + public static readonly StyledProperty IsSeparatorProperty = AvaloniaProperty.Register( + nameof(IsSeparator)); + + public bool IsSeparator + { + get => GetValue(IsSeparatorProperty); + set => SetValue(IsSeparatorProperty, value); + } static NavMenuItem() { @@ -222,6 +230,11 @@ public class NavMenuItem: HeaderedSelectingItemsControl protected override void OnPointerPressed(PointerPressedEventArgs e) { + if (IsSeparator) + { + e.Handled = true; + return; + } base.OnPointerPressed(e); if (this.ItemCount == 0) {