样式优化

This commit is contained in:
“hsc”
2026-08-27 13:37:06 +08:00
parent f46df16275
commit c41190aa33
6 changed files with 40 additions and 85 deletions
+8 -8
View File
@@ -15,41 +15,41 @@ namespace MainModule.ViewModels
private bool IsInitialized = false; private bool IsInitialized = false;
private string _expandedCellName = string.Empty; private string _expandedCellName = string.Empty;
#endregion #endregion
#region #region
public bool KeepAlive => true; // 保持存活 public bool KeepAlive => true; // 保持存活
public string ExpandedCellName public string ExpandedCellName
{ {
get => _expandedCellName; get => _expandedCellName;
set => SetProperty(ref _expandedCellName, value); set => SetProperty(ref _expandedCellName, value);
} }
#endregion #endregion
#region #region
public ICommand LoadedCommand { get; set; } public ICommand LoadedCommand { get; set; }
#endregion #endregion
public MainViewModel(IContainerProvider containerProvider) : base(containerProvider) public MainViewModel(IContainerProvider containerProvider) : base(containerProvider)
{ {
LoadedCommand = new DelegateCommand(OnLoaded); LoadedCommand = new DelegateCommand(OnLoaded);
_eventAggregator.GetEvent<ExpandViewEvent>().Subscribe(OnCellExpandRequested); _eventAggregator.GetEvent<ExpandViewEvent>().Subscribe(OnCellExpandRequested);
} }
#region #region
private void OnLoaded() private void OnLoaded()
{ {
if (IsInitialized) return; if (IsInitialized) return;
for (int i = 1; i <= 9; i++) for (int i = 1; i <= 3; i++)
{ {
var parameters = new NavigationParameters { { "Name", $"TestCell{i}" } }; var parameters = new NavigationParameters { { "Name", $"TestCell{i}" } };
_regionManager.RequestNavigate($"TestCell{i}", "ProtocolStartView", parameters); _regionManager.RequestNavigate($"TestCell{i}", "ProtocolStartView", parameters);
} }
IsInitialized = true; IsInitialized = true;
} }
// 不再物理搬迁视图,只需修改一个字符串属性 ExpandedCellName // 不再物理搬迁视图,只需修改一个字符串属性 ExpandedCellName
// XAML 里每个单元的 Style.Triggers 会根据该值处理隐藏 / 跨越 3x3 // XAML 里每个单元的 Style.Triggers 会根据该值处理隐藏 / 跨越整行
private void OnCellExpandRequested(string cellName) private void OnCellExpandRequested(string cellName)
{ {
ExpandedCellName = cellName ?? string.Empty; ExpandedCellName = cellName ?? string.Empty;
+7 -71
View File
@@ -24,75 +24,9 @@
<!-- 顶部的选项卡,切换 3 个台架 --> <!-- 顶部的选项卡,切换 3 个台架 -->
<TabControl Margin="5"> <TabControl Margin="5">
<!-- 标签页 1Inverse 参数 = 展开全屏(ExpandedCellName 非空)时隐藏标签页,不动主题样式 -->
<TabControl.Resources> <TabItem Header="台架 1 (Bench 1)"
<!-- 1. 去除 TabControl 原生的丑陋边框和灰色背景 --> Visibility="{Binding ExpandedCellName, Converter={StaticResource StringToVisibilityConverter}, ConverterParameter=Inverse}">
<Style TargetType="TabControl">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="0,5,0,0"/>
</Style>
<!-- 2. 美化 TabItem 标签头 -->
<Style TargetType="TabItem">
<Setter Property="FontSize" Value="16"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Foreground" Value="#8C8C8C"/>
<!-- 默认灰字 -->
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Padding" Value="25,12"/>
<!-- 撑大点击区域 -->
<Setter Property="Margin" Value="0,0,4,0"/>
<!-- 标签之间的间距 -->
<Setter Property="Cursor" Value="Hand"/>
<!-- 核心魔法:重写外观结构 -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<!-- 用一个带底部边框的 Border 包装文字 -->
<Border Name="Border"
Background="{TemplateBinding Background}"
BorderBrush="Transparent"
BorderThickness="0,0,0,3"
CornerRadius="4,4,0,0">
<ContentPresenter x:Name="ContentSite"
VerticalAlignment="Center"
HorizontalAlignment="Center"
ContentSource="Header"
Margin="{TemplateBinding Padding}"/>
</Border>
<ControlTemplate.Triggers>
<!-- 交互状态1:鼠标悬浮 -->
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Border" Property="Background" Value="#E6E6E6"/>
<Setter Property="Foreground" Value="#595959"/>
</Trigger>
<!-- 交互状态2:被选中 -->
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Border" Property="Background" Value="White"/>
<!-- 选中时的底部指示条颜色(蓝色) -->
<Setter TargetName="Border" Property="BorderBrush" Value="#007ACC"/>
<!-- 选中时的字体颜色(蓝色) -->
<Setter Property="Foreground" Value="#007ACC"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<!-- !!!这是你原有的全屏隐藏逻辑!完美保留!!! -->
<DataTrigger Binding="{Binding ExpandedCellName, Converter={StaticResource StringToVisibilityConverter}}" Value="Visible">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TabControl.Resources>
<!-- 标签页 1 -->
<TabItem Header="台架 1 (Bench 1)">
<!-- 加一个白底包裹,显得更像现代卡片 --> <!-- 加一个白底包裹,显得更像现代卡片 -->
<Border Background="White" CornerRadius="0,4,4,4" Margin="0" BorderThickness="0" Padding="5"> <Border Background="White" CornerRadius="0,4,4,4" Margin="0" BorderThickness="0" Padding="5">
<ContentControl prism:RegionManager.RegionName="TestCell1" /> <ContentControl prism:RegionManager.RegionName="TestCell1" />
@@ -100,14 +34,16 @@
</TabItem> </TabItem>
<!-- 标签页 2 --> <!-- 标签页 2 -->
<TabItem Header="台架 2 (Bench 2)"> <TabItem Header="台架 2 (Bench 2)"
Visibility="{Binding ExpandedCellName, Converter={StaticResource StringToVisibilityConverter}, ConverterParameter=Inverse}">
<Border Background="White" CornerRadius="0,4,4,4" Margin="0" BorderThickness="0" Padding="5"> <Border Background="White" CornerRadius="0,4,4,4" Margin="0" BorderThickness="0" Padding="5">
<ContentControl prism:RegionManager.RegionName="TestCell2" /> <ContentControl prism:RegionManager.RegionName="TestCell2" />
</Border> </Border>
</TabItem> </TabItem>
<!-- 标签页 3 --> <!-- 标签页 3 -->
<TabItem Header="台架 3 (Bench 3)"> <TabItem Header="台架 3 (Bench 3)"
Visibility="{Binding ExpandedCellName, Converter={StaticResource StringToVisibilityConverter}, ConverterParameter=Inverse}">
<Border Background="White" CornerRadius="0,4,4,4" Margin="0" BorderThickness="0" Padding="5"> <Border Background="White" CornerRadius="0,4,4,4" Margin="0" BorderThickness="0" Padding="5">
<ContentControl prism:RegionManager.RegionName="TestCell3" /> <ContentControl prism:RegionManager.RegionName="TestCell3" />
</Border> </Border>
+1 -1
View File
@@ -54,7 +54,7 @@
<HierarchicalDataTemplate DataType="{x:Type model:InstructionNodeVM}" <HierarchicalDataTemplate DataType="{x:Type model:InstructionNodeVM}"
ItemsSource="{Binding Children}"> ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Name}" ToolTip="{Binding Tooltip}"/> <TextBlock Text="{Binding Name}" ToolTip="{Binding Tooltip}"/>
</HierarchicalDataTemplate> </HierarchicalDataTemplate>
</TreeView.Resources> </TreeView.Resources>
<!-- 双击 --> <!-- 双击 -->
+2 -2
View File
@@ -103,7 +103,7 @@
<DataTemplate> <DataTemplate>
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="100" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="50" /> <ColumnDefinition Width="50" />
<ColumnDefinition /> <ColumnDefinition />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
@@ -240,7 +240,7 @@
<DataTemplate> <DataTemplate>
<Grid Visibility="{Binding Category, Converter={StaticResource ParameterCategoryToVisibilityConverter}, ConverterParameter=Item}"> <Grid Visibility="{Binding Category, Converter={StaticResource ParameterCategoryToVisibilityConverter}, ConverterParameter=Item}">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="100" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="50" /> <ColumnDefinition Width="50" />
<ColumnDefinition /> <ColumnDefinition />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
+17
View File
@@ -53,6 +53,10 @@
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}" <i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"
CommandParameter="{Binding SelectedItems, RelativeSource={RelativeSource AncestorType=DataGrid}}" /> CommandParameter="{Binding SelectedItems, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
</i:EventTrigger> </i:EventTrigger>
<i:EventTrigger EventName="ContextMenuOpening">
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"
CommandParameter="{Binding SelectedItems, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
</i:EventTrigger>
</i:Interaction.Triggers> </i:Interaction.Triggers>
<!-- 行样式 --> <!-- 行样式 -->
<DataGrid.RowStyle> <DataGrid.RowStyle>
@@ -174,6 +178,10 @@
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}" <i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"
CommandParameter="{Binding SelectedItems, RelativeSource={RelativeSource AncestorType=DataGrid}}" /> CommandParameter="{Binding SelectedItems, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
</i:EventTrigger> </i:EventTrigger>
<i:EventTrigger EventName="ContextMenuOpening">
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"
CommandParameter="{Binding SelectedItems, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
</i:EventTrigger>
</i:Interaction.Triggers> </i:Interaction.Triggers>
<!-- 行样式 --> <!-- 行样式 -->
<DataGrid.RowStyle> <DataGrid.RowStyle>
@@ -262,6 +270,15 @@
</ContextMenu> </ContextMenu>
</DataGrid.ContextMenu> </DataGrid.ContextMenu>
<!-- 键盘 删除键绑定 Delete 命令 -->
<!--<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewKeyDown">
<i:InvokeCommandAction Command="{Binding DeleteStepCommand}"
CommandParameter="{Binding SelectedStep}"
PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>-->
</DataGrid> </DataGrid>
</DockPanel> </DockPanel>
</TabItem> </TabItem>
@@ -13,18 +13,20 @@ namespace UIShare.Converters
{ {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{ {
// 是否反转结果(字符串非空时返回 Collapsed),用于需要“有值则隐藏”的场景,如展开全屏时隐藏台架标签页
bool inverse = string.Equals(parameter?.ToString(), "Inverse", StringComparison.OrdinalIgnoreCase);
if(value is string str) if(value is string str)
{ {
if (string.IsNullOrEmpty(str)) if (string.IsNullOrEmpty(str))
{ {
return Visibility.Collapsed; return inverse ? Visibility.Visible : Visibility.Collapsed;
} }
else else
{ {
return Visibility.Visible; return inverse ? Visibility.Collapsed : Visibility.Visible;
} }
} }
return Visibility.Collapsed; return inverse ? Visibility.Visible : Visibility.Collapsed;
} }
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)