优化桌面端折叠菜单

This commit is contained in:
geht
2026-05-14 16:05:22 +08:00
parent 0342fdee2a
commit 379cc47e47
3 changed files with 108 additions and 9 deletions

View File

@@ -5,15 +5,27 @@ namespace YY.Admin.Module
{ {
public class TabSource : BindableBase public class TabSource : BindableBase
{ {
private string? _name;
/// <summary> /// <summary>
/// 名称 /// 名称
/// </summary> /// </summary>
public virtual string? Name { get; set; } public virtual string? Name
{
get => _name;
set => SetProperty(ref _name, value);
}
private string? _icon;
/// <summary> /// <summary>
/// 图标 /// 图标
/// </summary> /// </summary>
public virtual string? Icon { get; set; } public virtual string? Icon
{
get => _icon;
set => SetProperty(ref _icon, value);
}
/// <summary> /// <summary>
/// 图标类型 /// 图标类型

View File

@@ -165,6 +165,18 @@ namespace YY.Admin.ViewModels
set => SetProperty(ref _isAppSettingsOpen, value); set => SetProperty(ref _isAppSettingsOpen, value);
} }
/// <summary>
/// 为 true 时隐藏左侧功能菜单树(次级侧栏)
/// </summary>
private bool _isMenuTreePanelCollapsed;
public bool IsMenuTreePanelCollapsed
{
get => _isMenuTreePanelCollapsed;
set => SetProperty(ref _isMenuTreePanelCollapsed, value);
}
private NavItem? _menuTreeToggleNavItem;
private AppSettingsViewModel? _appSettingsViewModel; private AppSettingsViewModel? _appSettingsViewModel;
public AppSettingsViewModel? AppSettingsViewModel { public AppSettingsViewModel? AppSettingsViewModel {
get => _appSettingsViewModel; get => _appSettingsViewModel;
@@ -175,6 +187,7 @@ namespace YY.Admin.ViewModels
public ICommand ResetAppSettingsCommand { get; } public ICommand ResetAppSettingsCommand { get; }
public ICommand OpenAppSettingsCommand { get; } public ICommand OpenAppSettingsCommand { get; }
public ICommand OpenServerSettingsCommand { get; } public ICommand OpenServerSettingsCommand { get; }
public ICommand ToggleMenuTreePanelCommand { get; }
#endregion #endregion
@@ -212,6 +225,7 @@ namespace YY.Admin.ViewModels
OpenAppSettingsCommand = new DelegateCommand(OpenAppSettings); OpenAppSettingsCommand = new DelegateCommand(OpenAppSettings);
ResetAppSettingsCommand = new DelegateCommand(ResetAppSettings); ResetAppSettingsCommand = new DelegateCommand(ResetAppSettings);
OpenServerSettingsCommand = new DelegateCommand(OpenServerSettings); OpenServerSettingsCommand = new DelegateCommand(OpenServerSettings);
ToggleMenuTreePanelCommand = new DelegateCommand(ToggleMenuTreePanel);
// 初始化Sidebar数据 // 初始化Sidebar数据
InitNavItems(); InitNavItems();
@@ -300,6 +314,13 @@ namespace YY.Admin.ViewModels
Name = "Tab区域", Name = "Tab区域",
Command = new DelegateCommand<NavItem>(OnOpenOrActivateTab) Command = new DelegateCommand<NavItem>(OnOpenOrActivateTab)
}, },
(_menuTreeToggleNavItem = new NavItem {
Icon = "ChevronDoubleLeft",
Name = "折叠菜单",
AlignBottom = true,
IsActive = false,
Command = ToggleMenuTreePanelCommand
}),
new NavItem { new NavItem {
Icon = "Server", Icon = "Server",
Name = "服务器设置", Name = "服务器设置",
@@ -678,6 +699,29 @@ namespace YY.Admin.ViewModels
} }
} }
/// <summary>
/// 折叠 / 展示左侧菜单树区域
/// </summary>
private void ToggleMenuTreePanel()
{
IsMenuTreePanelCollapsed = !IsMenuTreePanelCollapsed;
if (_menuTreeToggleNavItem == null)
{
return;
}
if (IsMenuTreePanelCollapsed)
{
_menuTreeToggleNavItem.Name = "展示菜单";
_menuTreeToggleNavItem.Icon = "ChevronDoubleRight";
}
else
{
_menuTreeToggleNavItem.Name = "折叠菜单";
_menuTreeToggleNavItem.Icon = "ChevronDoubleLeft";
}
}
private void OpenServerSettings() private void OpenServerSettings()
{ {
_dialogService.ShowDialog("ServerSettingsDialog", r => _dialogService.ShowDialog("ServerSettingsDialog", r =>

View File

@@ -145,12 +145,34 @@
<Grid x:Name="MainContentGrid"> <Grid x:Name="MainContentGrid">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition <ColumnDefinition x:Name="LeftMenuTreeCol">
x:Name="LeftMenuTreeCol" <ColumnDefinition.Style>
Width="250" <Style TargetType="ColumnDefinition">
MinWidth="50" <Setter Property="Width" Value="250"/>
MaxWidth="{Binding ActualWidth, ElementName=MainContentGrid, Converter={StaticResource MaxWidthConverter}, ConverterParameter=50}"/> <Setter Property="MinWidth" Value="50"/>
<ColumnDefinition Width="4"/> <Setter Property="MaxWidth" Value="{Binding ActualWidth, ElementName=MainContentGrid, Converter={StaticResource MaxWidthConverter}, ConverterParameter=50}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsMenuTreePanelCollapsed}" Value="True">
<Setter Property="Width" Value="0"/>
<Setter Property="MinWidth" Value="0"/>
<Setter Property="MaxWidth" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
<ColumnDefinition>
<ColumnDefinition.Style>
<Style TargetType="ColumnDefinition">
<Setter Property="Width" Value="4"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsMenuTreePanelCollapsed}" Value="True">
<Setter Property="Width" Value="0"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
<ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- Sidebar侧边栏区域 --> <!-- Sidebar侧边栏区域 -->
@@ -159,6 +181,16 @@
BorderThickness="0,0,1,0" BorderThickness="0,0,1,0"
BorderBrush="{DynamicResource BorderBrush}" BorderBrush="{DynamicResource BorderBrush}"
Background="{DynamicResource RegionBrush}"> Background="{DynamicResource RegionBrush}">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsMenuTreePanelCollapsed}" Value="True">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<ContentControl prism:RegionManager.RegionName="{x:Static consts:CommonConst.MenuRegion}"/> <ContentControl prism:RegionManager.RegionName="{x:Static consts:CommonConst.MenuRegion}"/>
</Border> </Border>
<!-- 拖拽分隔条 --> <!-- 拖拽分隔条 -->
@@ -170,7 +202,18 @@
ShowsPreview="True" ShowsPreview="True"
Cursor="SizeWE" Cursor="SizeWE"
Background="{DynamicResource RegionBrush}" Background="{DynamicResource RegionBrush}"
PreviewStyle="{StaticResource GridSplitterPreviewStyle}"/> PreviewStyle="{StaticResource GridSplitterPreviewStyle}">
<GridSplitter.Style>
<Style TargetType="GridSplitter">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsMenuTreePanelCollapsed}" Value="True">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</GridSplitter.Style>
</GridSplitter>
<!-- 主内容区域 --> <!-- 主内容区域 -->
<Border <Border
Grid.Column="2" Grid.Column="2"