样式优化
This commit is contained in:
@@ -15,41 +15,41 @@ namespace MainModule.ViewModels
|
||||
private bool IsInitialized = false;
|
||||
private string _expandedCellName = string.Empty;
|
||||
#endregion
|
||||
|
||||
|
||||
#region 属性
|
||||
public bool KeepAlive => true; // 保持存活
|
||||
|
||||
|
||||
public string ExpandedCellName
|
||||
{
|
||||
get => _expandedCellName;
|
||||
set => SetProperty(ref _expandedCellName, value);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region 命令
|
||||
public ICommand LoadedCommand { get; set; }
|
||||
#endregion
|
||||
|
||||
|
||||
public MainViewModel(IContainerProvider containerProvider) : base(containerProvider)
|
||||
{
|
||||
LoadedCommand = new DelegateCommand(OnLoaded);
|
||||
_eventAggregator.GetEvent<ExpandViewEvent>().Subscribe(OnCellExpandRequested);
|
||||
}
|
||||
|
||||
|
||||
#region 命令处理与事件
|
||||
private void OnLoaded()
|
||||
{
|
||||
if (IsInitialized) return;
|
||||
for (int i = 1; i <= 9; i++)
|
||||
for (int i = 1; i <= 3; i++)
|
||||
{
|
||||
var parameters = new NavigationParameters { { "Name", $"TestCell{i}" } };
|
||||
_regionManager.RequestNavigate($"TestCell{i}", "ProtocolStartView", parameters);
|
||||
}
|
||||
IsInitialized = true;
|
||||
}
|
||||
|
||||
|
||||
// 不再物理搬迁视图,只需修改一个字符串属性 ExpandedCellName,
|
||||
// XAML 里每个单元的 Style.Triggers 会根据该值处理隐藏 / 跨越 3x3。
|
||||
// XAML 里每个单元的 Style.Triggers 会根据该值处理隐藏 / 跨越整行。
|
||||
private void OnCellExpandRequested(string cellName)
|
||||
{
|
||||
ExpandedCellName = cellName ?? string.Empty;
|
||||
|
||||
@@ -24,75 +24,9 @@
|
||||
|
||||
<!-- 顶部的选项卡,切换 3 个台架 -->
|
||||
<TabControl Margin="5">
|
||||
|
||||
<TabControl.Resources>
|
||||
<!-- 1. 去除 TabControl 原生的丑陋边框和灰色背景 -->
|
||||
<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)">
|
||||
<!-- 标签页 1:Inverse 参数 = 展开全屏(ExpandedCellName 非空)时隐藏标签页,不动主题样式 -->
|
||||
<TabItem Header="台架 1 (Bench 1)"
|
||||
Visibility="{Binding ExpandedCellName, Converter={StaticResource StringToVisibilityConverter}, ConverterParameter=Inverse}">
|
||||
<!-- 加一个白底包裹,显得更像现代卡片 -->
|
||||
<Border Background="White" CornerRadius="0,4,4,4" Margin="0" BorderThickness="0" Padding="5">
|
||||
<ContentControl prism:RegionManager.RegionName="TestCell1" />
|
||||
@@ -100,14 +34,16 @@
|
||||
</TabItem>
|
||||
|
||||
<!-- 标签页 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">
|
||||
<ContentControl prism:RegionManager.RegionName="TestCell2" />
|
||||
</Border>
|
||||
</TabItem>
|
||||
|
||||
<!-- 标签页 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">
|
||||
<ContentControl prism:RegionManager.RegionName="TestCell3" />
|
||||
</Border>
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
<HierarchicalDataTemplate DataType="{x:Type model:InstructionNodeVM}"
|
||||
ItemsSource="{Binding Children}">
|
||||
<TextBlock Text="{Binding Name}" ToolTip="{Binding Tooltip}"/>
|
||||
|
||||
|
||||
</HierarchicalDataTemplate>
|
||||
</TreeView.Resources>
|
||||
<!-- 双击 -->
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
<DataTemplate>
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="100" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="50" />
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
@@ -240,7 +240,7 @@
|
||||
<DataTemplate>
|
||||
<Grid Visibility="{Binding Category, Converter={StaticResource ParameterCategoryToVisibilityConverter}, ConverterParameter=Item}">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="100" />
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="50" />
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
@@ -53,6 +53,10 @@
|
||||
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"
|
||||
CommandParameter="{Binding SelectedItems, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
|
||||
</i:EventTrigger>
|
||||
<i:EventTrigger EventName="ContextMenuOpening">
|
||||
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"
|
||||
CommandParameter="{Binding SelectedItems, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
<!-- 行样式 -->
|
||||
<DataGrid.RowStyle>
|
||||
@@ -174,6 +178,10 @@
|
||||
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"
|
||||
CommandParameter="{Binding SelectedItems, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
|
||||
</i:EventTrigger>
|
||||
<i:EventTrigger EventName="ContextMenuOpening">
|
||||
<i:InvokeCommandAction Command="{Binding SelectionChangedCommand}"
|
||||
CommandParameter="{Binding SelectedItems, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
<!-- 行样式 -->
|
||||
<DataGrid.RowStyle>
|
||||
@@ -262,6 +270,15 @@
|
||||
</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>
|
||||
</DockPanel>
|
||||
</TabItem>
|
||||
|
||||
@@ -13,18 +13,20 @@ namespace UIShare.Converters
|
||||
{
|
||||
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 (string.IsNullOrEmpty(str))
|
||||
{
|
||||
return Visibility.Collapsed;
|
||||
return inverse ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user