diff --git a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SideMenuDemoCtl.xaml b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SideMenuDemoCtl.xaml index 1b9da3bf..3c8dbb3a 100644 --- a/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SideMenuDemoCtl.xaml +++ b/src/Shared/HandyControlDemo_Shared/UserControl/Controls/SideMenuDemoCtl.xaml @@ -6,7 +6,7 @@ Background="{DynamicResource RegionBrush}"> - + diff --git a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs index 6fa96617..9f5dff65 100644 --- a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs +++ b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenu.cs @@ -1,5 +1,6 @@ using System.Windows; using HandyControl.Data; +using HandyControl.Data.Enum; namespace HandyControl.Controls { @@ -38,10 +39,12 @@ namespace HandyControl.Controls if (_selectedHeader != null) { _selectedHeader.IsSelected = false; + SwitchPanelArea(_selectedHeader); } _selectedHeader = item; _selectedHeader.IsSelected = true; + SwitchPanelArea(_selectedHeader); } if (_isItemSelected) @@ -57,8 +60,30 @@ namespace HandyControl.Controls } } + private void SwitchPanelArea(SideMenuItem oldItem) + { + switch (ExpandMode) + { + case ExpandMode.ShowAll: + return; + case ExpandMode.ShowOne: + case ExpandMode.Accordion: + oldItem.SwitchPanelArea(oldItem.IsSelected); + break; + } + } + protected override DependencyObject GetContainerForItemOverride() => new SideMenuItem(); protected override bool IsItemItsOwnContainerOverride(object item) => item is SideMenuItem; + + public static readonly DependencyProperty ExpandModeProperty = DependencyProperty.Register( + "ExpandMode", typeof(ExpandMode), typeof(SideMenu), new PropertyMetadata(default(ExpandMode))); + + public ExpandMode ExpandMode + { + get => (ExpandMode) GetValue(ExpandModeProperty); + set => SetValue(ExpandModeProperty, value); + } } } diff --git a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs index 7337bef5..937b3c52 100644 --- a/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs +++ b/src/Shared/HandyControl_Shared/Controls/SideMenu/SideMenuItem.cs @@ -2,6 +2,7 @@ using System.Windows; using System.Windows.Input; using HandyControl.Data; +using HandyControl.Tools.Extension; namespace HandyControl.Controls { @@ -89,5 +90,13 @@ namespace HandyControl.Controls } } } + + internal void SwitchPanelArea(bool close) + { + if (Role == SideMenuItemRole.Header) + { + ItemsHost.Show(close); + } + } } } \ No newline at end of file