diff --git a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs index d419a4cd..6fa96617 100644 --- a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs +++ b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs @@ -9,6 +9,8 @@ namespace HandyControl.Controls private SideMenuItem _selectedHeader; + private bool _isItemSelected; + public SideMenu() { AddHandler(SideMenuItem.SelectedEvent, new RoutedEventHandler(SideMenuItemSelected)); @@ -27,17 +29,30 @@ namespace HandyControl.Controls _selectedItem = item; _selectedItem.IsSelected = true; + _isItemSelected = true; } else { - if (_selectedHeader != null) + if (!Equals(item, _selectedHeader)) { - _selectedHeader.IsSelected = false; + if (_selectedHeader != null) + { + _selectedHeader.IsSelected = false; + } + + _selectedHeader = item; + _selectedHeader.IsSelected = true; } - _selectedHeader = item; - _selectedHeader.IsSelected = true; - _selectedHeader.SelectDefaultItem(_selectedItem); + if (_isItemSelected) + { + _isItemSelected = false; + } + else + { + _selectedHeader.SelectDefaultItem(); + _isItemSelected = false; + } } } } diff --git a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs index c5fa28f9..7337bef5 100644 --- a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs +++ b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs @@ -72,20 +72,16 @@ namespace HandyControl.Controls if (_isMouseLeftButtonDown) { - if (!IsSelected) - { - IsSelected = true; - OnSelected(new RoutedEventArgs(SelectedEvent, this)); - } + IsSelected = true; + OnSelected(new RoutedEventArgs(SelectedEvent, this)); _isMouseLeftButtonDown = false; } } - internal void SelectDefaultItem(SideMenuItem menuItem) + internal void SelectDefaultItem() { if (Role == SideMenuItemRole.Header && ItemsHost.Children.Count > 0) { - if (ItemsHost.Children.Contains(menuItem)) return; var item = ItemsHost.Children.OfType().FirstOrDefault(); if (item != null && !item.IsSelected) { diff --git a/src/Shared/HandyControl_Shared/Data/Enum/ExpandMode.cs b/src/Shared/HandyControl_Shared/Data/Enum/ExpandMode.cs new file mode 100644 index 00000000..ab404a40 --- /dev/null +++ b/src/Shared/HandyControl_Shared/Data/Enum/ExpandMode.cs @@ -0,0 +1,25 @@ +namespace HandyControl.Data.Enum +{ + public enum ExpandMode + { + /// + /// 显示所有项,且不可折叠 + /// + ShowAll, + + /// + /// 最多只能显示一项,且不可折叠 + /// + ShowOne, + + /// + /// 类似ShowOne,但是控件的尺寸不随项的数量而改变 + /// + Accordion, + + /// + /// 没有任何限制 + /// + Freedom + } +} diff --git a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems index 1a7ed268..d2ceb0df 100644 --- a/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems +++ b/src/Shared/HandyControl_Shared/HandyControl_Shared.projitems @@ -112,6 +112,7 @@ + diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SideMenuBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SideMenuBaseStyle.xaml index 720a9584..64ff65c6 100644 --- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/SideMenuBaseStyle.xaml +++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/SideMenuBaseStyle.xaml @@ -28,7 +28,7 @@ - + @@ -75,7 +75,7 @@ - +