From dc3c61dab5d293e3fa604e2d4d750959f3095dbc Mon Sep 17 00:00:00 2001 From: rabbitism Date: Mon, 12 Feb 2024 20:47:55 +0800 Subject: [PATCH] wip. --- demo/Ursa.Demo/Pages/NavMenuDemo.axaml | 84 +++++++++---------- .../ViewModels/NavMenuDemoViewModel.cs | 7 +- src/Ursa.Themes.Semi/Controls/NavMenu.axaml | 19 +++-- src/Ursa/Controls/NavMenu/NavMenuItem.cs | 19 ++++- 4 files changed, 80 insertions(+), 49 deletions(-) diff --git a/demo/Ursa.Demo/Pages/NavMenuDemo.axaml b/demo/Ursa.Demo/Pages/NavMenuDemo.axaml index e9760a2..05edc59 100644 --- a/demo/Ursa.Demo/Pages/NavMenuDemo.axaml +++ b/demo/Ursa.Demo/Pages/NavMenuDemo.axaml @@ -11,46 +11,46 @@ x:CompileBindings="True" x:DataType="vm:NavMenuDemoViewModel" mc:Ignorable="d"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo/Ursa.Demo/ViewModels/NavMenuDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/NavMenuDemoViewModel.cs index 6aa42ac..f7dc981 100644 --- a/demo/Ursa.Demo/ViewModels/NavMenuDemoViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/NavMenuDemoViewModel.cs @@ -13,7 +13,12 @@ public class NavMenuDemoViewModel: ObservableObject { new MenuItem { Header = "Introduction" , Children = { - new MenuItem() { Header = "Getting Started" }, + new MenuItem() { Header = "Getting Started", Children = + { + new MenuItem() { Header = "Code of Conduct" }, + new MenuItem() { Header = "How to Contribute" }, + new MenuItem() { Header = "Development Workflow" }, + }}, new MenuItem() { Header = "Design Principles" }, new MenuItem() { Header = "Contributing", Children = { diff --git a/src/Ursa.Themes.Semi/Controls/NavMenu.axaml b/src/Ursa.Themes.Semi/Controls/NavMenu.axaml index 918bdc1..2f24300 100644 --- a/src/Ursa.Themes.Semi/Controls/NavMenu.axaml +++ b/src/Ursa.Themes.Semi/Controls/NavMenu.axaml @@ -7,7 +7,9 @@ - + + + @@ -15,19 +17,22 @@ - + - + + + + diff --git a/src/Ursa/Controls/NavMenu/NavMenuItem.cs b/src/Ursa/Controls/NavMenu/NavMenuItem.cs index 6424278..da05dcd 100644 --- a/src/Ursa/Controls/NavMenu/NavMenuItem.cs +++ b/src/Ursa/Controls/NavMenu/NavMenuItem.cs @@ -11,6 +11,12 @@ using Avalonia.VisualTree; namespace Ursa.Controls; +/// +/// Navigation Menu Item +/// Note: +/// collapsed: Entire menu is collapsed, only first level icon is displayed. Submenus are in popup. +/// closed: When menu is not in collapsed mode, represents whether submenu is hidden. +/// [PseudoClasses(PC_Highlighted, PC_Collapsed, PC_Closed, PC_FirstLevel, PC_Selector)] public class NavMenuItem: HeaderedSelectingItemsControl { @@ -145,7 +151,10 @@ public class NavMenuItem: HeaderedSelectingItemsControl protected override void OnPointerPressed(PointerPressedEventArgs e) { base.OnPointerPressed(e); - SelectItem(this); + if (this.ItemCount == 0) + { + SelectItem(this); + } Command?.Execute(CommandParameter); e.Handled = true; } @@ -165,6 +174,14 @@ public class NavMenuItem: HeaderedSelectingItemsControl if (this.Parent is NavMenuItem menuItem) { menuItem.SelectItem(item); + var items = menuItem.LogicalChildren.OfType(); + foreach (var child in items) + { + if (child != this) + { + child.ClearSelection(); + } + } } else if (this.Parent is NavMenu menu) {