样式优化
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -24,75 +24,9 @@
|
|||||||
|
|
||||||
<!-- 顶部的选项卡,切换 3 个台架 -->
|
<!-- 顶部的选项卡,切换 3 个台架 -->
|
||||||
<TabControl Margin="5">
|
<TabControl Margin="5">
|
||||||
|
<!-- 标签页 1:Inverse 参数 = 展开全屏(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>
|
||||||
|
|||||||
@@ -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>
|
||||||
<!-- 双击 -->
|
<!-- 双击 -->
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user