优化桌面端折叠菜单

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
{
private string? _name;
/// <summary>
/// 名称
/// </summary>
public virtual string? Name { get; set; }
public virtual string? Name
{
get => _name;
set => SetProperty(ref _name, value);
}
private string? _icon;
/// <summary>
/// 图标
/// </summary>
public virtual string? Icon { get; set; }
public virtual string? Icon
{
get => _icon;
set => SetProperty(ref _icon, value);
}
/// <summary>
/// 图标类型

View File

@@ -165,6 +165,18 @@ namespace YY.Admin.ViewModels
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;
public AppSettingsViewModel? AppSettingsViewModel {
get => _appSettingsViewModel;
@@ -175,6 +187,7 @@ namespace YY.Admin.ViewModels
public ICommand ResetAppSettingsCommand { get; }
public ICommand OpenAppSettingsCommand { get; }
public ICommand OpenServerSettingsCommand { get; }
public ICommand ToggleMenuTreePanelCommand { get; }
#endregion
@@ -212,6 +225,7 @@ namespace YY.Admin.ViewModels
OpenAppSettingsCommand = new DelegateCommand(OpenAppSettings);
ResetAppSettingsCommand = new DelegateCommand(ResetAppSettings);
OpenServerSettingsCommand = new DelegateCommand(OpenServerSettings);
ToggleMenuTreePanelCommand = new DelegateCommand(ToggleMenuTreePanel);
// 初始化Sidebar数据
InitNavItems();
@@ -300,6 +314,13 @@ namespace YY.Admin.ViewModels
Name = "Tab区域",
Command = new DelegateCommand<NavItem>(OnOpenOrActivateTab)
},
(_menuTreeToggleNavItem = new NavItem {
Icon = "ChevronDoubleLeft",
Name = "折叠菜单",
AlignBottom = true,
IsActive = false,
Command = ToggleMenuTreePanelCommand
}),
new NavItem {
Icon = "Server",
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()
{
_dialogService.ShowDialog("ServerSettingsDialog", r =>

View File

@@ -145,12 +145,34 @@
<Grid x:Name="MainContentGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition
x:Name="LeftMenuTreeCol"
Width="250"
MinWidth="50"
MaxWidth="{Binding ActualWidth, ElementName=MainContentGrid, Converter={StaticResource MaxWidthConverter}, ConverterParameter=50}"/>
<ColumnDefinition Width="4"/>
<ColumnDefinition x:Name="LeftMenuTreeCol">
<ColumnDefinition.Style>
<Style TargetType="ColumnDefinition">
<Setter Property="Width" Value="250"/>
<Setter Property="MinWidth" Value="50"/>
<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="*"/>
</Grid.ColumnDefinitions>
<!-- Sidebar侧边栏区域 -->
@@ -159,6 +181,16 @@
BorderThickness="0,0,1,0"
BorderBrush="{DynamicResource BorderBrush}"
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}"/>
</Border>
<!-- 拖拽分隔条 -->
@@ -170,7 +202,18 @@
ShowsPreview="True"
Cursor="SizeWE"
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
Grid.Column="2"