mirror of
https://github.com/ShrlAlgo/AddinManager.git
synced 2026-03-07 16:38:56 +00:00
862 lines
45 KiB
XML
862 lines
45 KiB
XML
<ResourceDictionary
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
xmlns:local="clr-namespace:AddInManager.Wpf">
|
||
|
||
<!-- 颜色定义 -->
|
||
<SolidColorBrush x:Key="PrimaryBrush" Color="#0078D4" />
|
||
<SolidColorBrush x:Key="PrimaryHoverBrush" Color="#106EBE" />
|
||
<SolidColorBrush x:Key="PrimaryPressedBrush" Color="#005A9E" />
|
||
<SolidColorBrush x:Key="DangerBrush" Color="#D83B01" />
|
||
<SolidColorBrush x:Key="DangerHoverBrush" Color="#A4262C" />
|
||
<SolidColorBrush x:Key="DangerPressedBrush" Color="#8B1E25" />
|
||
<SolidColorBrush x:Key="SecondaryBrush" Color="#605E5C" />
|
||
<SolidColorBrush x:Key="SecondaryHoverBrush" Color="#484644" />
|
||
<SolidColorBrush x:Key="SecondaryPressedBrush" Color="#323130" />
|
||
<SolidColorBrush x:Key="BorderBrush" Color="#D1D1D1" />
|
||
<SolidColorBrush x:Key="LightBorderBrush" Color="#E1DFDD" />
|
||
<SolidColorBrush x:Key="BackgroundBrush" Color="#F5F5F5" />
|
||
<SolidColorBrush x:Key="LightBackgroundBrush" Color="#F8F8F8" />
|
||
<SolidColorBrush x:Key="TextBrush" Color="#323130" />
|
||
<SolidColorBrush x:Key="SecondaryTextBrush" Color="#605E5C" />
|
||
<SolidColorBrush x:Key="DisabledBrush" Color="#CCCCCC" />
|
||
<SolidColorBrush x:Key="DisabledTextBrush" Color="#888888" />
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="VerticalAlignment" Value="Center" />
|
||
</Style>
|
||
|
||
<Style TargetType="Button">
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="FontSize" Value="12" />
|
||
<Setter Property="Padding" Value="12,4" />
|
||
<Setter Property="Cursor" Value="Hand" />
|
||
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="Button">
|
||
<Border
|
||
x:Name="border"
|
||
Padding="{TemplateBinding Padding}"
|
||
Background="{TemplateBinding Background}"
|
||
BorderBrush="{TemplateBinding BorderBrush}"
|
||
BorderThickness="{TemplateBinding BorderThickness}"
|
||
CornerRadius="4">
|
||
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
|
||
</Border>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
<Style.Triggers>
|
||
<Trigger Property="IsEnabled" Value="False">
|
||
<Setter Property="Background" Value="{StaticResource DisabledBrush}" />
|
||
<Setter Property="Foreground" Value="{StaticResource DisabledTextBrush}" />
|
||
</Trigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
<Style
|
||
x:Key="ActionButton"
|
||
BasedOn="{StaticResource {x:Type Button}}"
|
||
TargetType="Button">
|
||
<!-- 1. 设置基础样式 (默认为次要按钮的外观) -->
|
||
<Setter Property="Background" Value="White" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource BorderBrush}" />
|
||
<Setter Property="Padding" Value="12,4" />
|
||
|
||
<Style.Triggers>
|
||
<!-- 2. 基础状态触发器 (默认/次要按钮) -->
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter Property="Background" Value="#F3F2F1" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource PrimaryBrush}" />
|
||
</Trigger>
|
||
<Trigger Property="IsPressed" Value="True">
|
||
<Setter Property="Background" Value="#EDEBE9" />
|
||
</Trigger>
|
||
|
||
<!-- =============================================================== -->
|
||
<!-- 3. 基于 Tag 属性改变外观的核心 DataTriggers -->
|
||
<!-- =============================================================== -->
|
||
|
||
<!-- 当 Tag="Primary" 时,应用主要按钮颜色 -->
|
||
<DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="Primary">
|
||
<Setter Property="Background" Value="{StaticResource PrimaryBrush}" />
|
||
<Setter Property="Foreground" Value="White" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource PrimaryBrush}" />
|
||
</DataTrigger>
|
||
|
||
<!-- 当 Tag="Danger" 时,应用危险按钮颜色 -->
|
||
<DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="Danger">
|
||
<Setter Property="Background" Value="{StaticResource DangerBrush}" />
|
||
<Setter Property="Foreground" Value="White" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource DangerBrush}" />
|
||
</DataTrigger>
|
||
|
||
<!-- =============================================================== -->
|
||
<!-- 4. 复合触发器,处理不同 Tag 下的悬停和按下状态 -->
|
||
<!-- =============================================================== -->
|
||
|
||
<!-- 当 Tag="Primary" 并且 IsMouseOver="True" -->
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="Primary" />
|
||
<Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource PrimaryHoverBrush}" />
|
||
</MultiDataTrigger>
|
||
|
||
<!-- 当 Tag="Primary" 并且 IsPressed="True" -->
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="Primary" />
|
||
<Condition Binding="{Binding Path=IsPressed, RelativeSource={RelativeSource Self}}" Value="True" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource PrimaryPressedBrush}" />
|
||
</MultiDataTrigger>
|
||
|
||
<!-- 当 Tag="Danger" 并且 IsMouseOver="True" -->
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="Danger" />
|
||
<Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource DangerHoverBrush}" />
|
||
</MultiDataTrigger>
|
||
|
||
<!-- 当 Tag="Danger" 并且 IsPressed="True" -->
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="Danger" />
|
||
<Condition Binding="{Binding Path=IsPressed, RelativeSource={RelativeSource Self}}" Value="True" />
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Background" Value="{StaticResource DangerPressedBrush}" />
|
||
</MultiDataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
<!-- 浏览按钮样式 -->
|
||
<Style
|
||
x:Key="BrowseButton"
|
||
BasedOn="{StaticResource {x:Type Button}}"
|
||
TargetType="Button">
|
||
<Setter Property="Background" Value="{StaticResource SecondaryBrush}" />
|
||
<Setter Property="Foreground" Value="White" />
|
||
<!--<Setter Property="Padding" Value="12,6" />-->
|
||
<Setter Property="FontSize" Value="11" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="Button">
|
||
<Border
|
||
Padding="{TemplateBinding Padding}"
|
||
Background="{TemplateBinding Background}"
|
||
CornerRadius="0,4,4,0">
|
||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||
</Border>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
<Style.Triggers>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter Property="Background" Value="{StaticResource SecondaryHoverBrush}" />
|
||
</Trigger>
|
||
<Trigger Property="IsPressed" Value="True">
|
||
<Setter Property="Background" Value="{StaticResource SecondaryPressedBrush}" />
|
||
</Trigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
|
||
<!-- 工具栏按钮样式 -->
|
||
<Style
|
||
x:Key="ToolbarButton"
|
||
BasedOn="{StaticResource {x:Type Button}}"
|
||
TargetType="Button">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="Foreground" Value="{StaticResource SecondaryTextBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource BorderBrush}" />
|
||
<Setter Property="FontSize" Value="10" />
|
||
<Setter Property="Width" Value="20" />
|
||
<Setter Property="Height" Value="20" />
|
||
<Setter Property="Padding" Value="0" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="Button">
|
||
<Border
|
||
Padding="{TemplateBinding Padding}"
|
||
Background="{TemplateBinding Background}"
|
||
BorderBrush="{TemplateBinding BorderBrush}"
|
||
BorderThickness="{TemplateBinding BorderThickness}"
|
||
CornerRadius="3">
|
||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||
</Border>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
<Style.Triggers>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter Property="Background" Value="{StaticResource LightBackgroundBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource PrimaryBrush}" />
|
||
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}" />
|
||
</Trigger>
|
||
<Trigger Property="IsPressed" Value="True">
|
||
<Setter Property="Background" Value="{StaticResource PrimaryBrush}" />
|
||
<Setter Property="Foreground" Value="White" />
|
||
</Trigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
|
||
|
||
<Style TargetType="TextBox">
|
||
<Setter Property="Padding" Value="4" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource BorderBrush}" />
|
||
<Setter Property="Background" Value="White" />
|
||
<Setter Property="FontSize" Value="12" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="TextBox">
|
||
<Border
|
||
x:Name="border"
|
||
Background="{TemplateBinding Background}"
|
||
BorderBrush="{TemplateBinding BorderBrush}"
|
||
BorderThickness="{TemplateBinding BorderThickness}"
|
||
CornerRadius="4">
|
||
<ScrollViewer x:Name="PART_ContentHost" Margin="{TemplateBinding Padding}" />
|
||
</Border>
|
||
<ControlTemplate.Triggers>
|
||
<Trigger Property="IsFocused" Value="True">
|
||
<Setter Property="BorderBrush" Value="{StaticResource PrimaryBrush}" />
|
||
</Trigger>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter Property="BorderBrush" Value="{StaticResource PrimaryHoverBrush}" />
|
||
</Trigger>
|
||
<!-- 这就是替代 ReadOnlyTextBox 的触发器 -->
|
||
<Trigger Property="IsReadOnly" Value="True">
|
||
<Setter Property="Background" Value="{StaticResource LightBackgroundBrush}" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource LightBorderBrush}" />
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
|
||
<!-- 2. 搜索文本框样式 (内置图标、水印和清除按钮) -->
|
||
<Style
|
||
x:Key="SearchTextBox"
|
||
BasedOn="{StaticResource {x:Type TextBox}}"
|
||
TargetType="TextBox">
|
||
<Setter Property="Tag" Value="搜索命令..." />
|
||
<!-- 用于水印的默认文本 -->
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="TextBox">
|
||
<Border
|
||
x:Name="border"
|
||
Background="{TemplateBinding Background}"
|
||
BorderBrush="{TemplateBinding BorderBrush}"
|
||
BorderThickness="{TemplateBinding BorderThickness}"
|
||
CornerRadius="4"
|
||
SnapsToDevicePixels="True">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="Auto" />
|
||
<ColumnDefinition Width="*" />
|
||
<ColumnDefinition Width="Auto" />
|
||
</Grid.ColumnDefinitions>
|
||
<!-- 搜索图标 -->
|
||
<TextBlock
|
||
Margin="8,0,0,0"
|
||
HorizontalAlignment="Left"
|
||
VerticalAlignment="Center"
|
||
FontFamily="Segoe MDL2 Assets"
|
||
FontSize="12"
|
||
Foreground="{StaticResource SecondaryTextBrush}"
|
||
IsHitTestVisible="False"
|
||
Text="" />
|
||
|
||
<!-- 这是TextBox实际输入内容的地方 -->
|
||
<ScrollViewer
|
||
x:Name="PART_ContentHost"
|
||
Grid.Column="1"
|
||
Focusable="false"
|
||
HorizontalScrollBarVisibility="Hidden"
|
||
VerticalScrollBarVisibility="Hidden" />
|
||
|
||
<!-- 水印文本 -->
|
||
<TextBlock
|
||
x:Name="Watermark"
|
||
Grid.Column="1"
|
||
Margin="{TemplateBinding Padding}"
|
||
VerticalAlignment="Center"
|
||
Foreground="{StaticResource SecondaryTextBrush}"
|
||
IsHitTestVisible="False"
|
||
Text="{TemplateBinding Tag}">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed" />
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}" Value="">
|
||
<Setter Property="Visibility" Value="Visible" />
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
|
||
<!-- 清除按钮 -->
|
||
<Button
|
||
x:Name="PART_ClearButton"
|
||
Grid.Column="2"
|
||
Width="16"
|
||
Height="16"
|
||
Margin="0,0,6,0"
|
||
HorizontalAlignment="Right"
|
||
VerticalAlignment="Center"
|
||
Content="✕"
|
||
Cursor="Hand"
|
||
FontSize="10">
|
||
<Button.Style>
|
||
<Style TargetType="Button">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="Foreground" Value="{StaticResource SecondaryTextBrush}" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="Visibility" Value="Collapsed" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="Button">
|
||
<Border
|
||
Padding="2"
|
||
Background="{TemplateBinding Background}"
|
||
CornerRadius="8">
|
||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||
</Border>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TextBox}}" Value="">
|
||
<Setter Property="Visibility" Value="Collapsed" />
|
||
</DataTrigger>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter Property="Background" Value="{StaticResource LightBackgroundBrush}" />
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
</Trigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Button.Style>
|
||
</Button>
|
||
</Grid>
|
||
</Border>
|
||
<ControlTemplate.Triggers>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter TargetName="border" Property="BorderBrush" Value="{StaticResource PrimaryHoverBrush}" />
|
||
</Trigger>
|
||
<Trigger Property="IsFocused" Value="True">
|
||
<Setter TargetName="border" Property="BorderBrush" Value="{StaticResource PrimaryBrush}" />
|
||
<Setter TargetName="border" Property="BorderThickness" Value="1" />
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
|
||
<!-- 文件路径文本框样式 -->
|
||
<Style
|
||
x:Key="FilePathTextBox"
|
||
BasedOn="{StaticResource {x:Type TextBox}}"
|
||
TargetType="TextBox">
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="TextBox">
|
||
<Border
|
||
Background="{TemplateBinding Background}"
|
||
BorderBrush="{TemplateBinding BorderBrush}"
|
||
BorderThickness="{TemplateBinding BorderThickness}"
|
||
CornerRadius="4,0,0,4">
|
||
<ScrollViewer x:Name="PART_ContentHost" Margin="{TemplateBinding Padding}" />
|
||
</Border>
|
||
<ControlTemplate.Triggers>
|
||
<Trigger Property="IsFocused" Value="True">
|
||
<Setter Property="BorderBrush" Value="{StaticResource PrimaryBrush}" />
|
||
<Setter Property="BorderThickness" Value="2" />
|
||
</Trigger>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter Property="BorderBrush" Value="{StaticResource PrimaryHoverBrush}" />
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
<!-- ================================================================== -->
|
||
<!-- 扁平化 TabControl 样式 (替换旧样式) -->
|
||
<!-- ================================================================== -->
|
||
|
||
<!-- TabControl 样式 -->
|
||
<!-- 这个模板创建了一个清晰的结构:顶部是标签头,下面是带上边框的内容区域 -->
|
||
<Style TargetType="TabControl">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="BorderThickness" Value="0" />
|
||
<Setter Property="Padding" Value="0" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="TabControl">
|
||
<Grid KeyboardNavigation.TabNavigation="Local">
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="*" />
|
||
</Grid.RowDefinitions>
|
||
|
||
<!-- 1. 顶部的标签头区域 -->
|
||
<TabPanel
|
||
Grid.Row="0"
|
||
Margin="0,0,0,-1"
|
||
Background="Transparent"
|
||
IsItemsHost="true"
|
||
KeyboardNavigation.TabIndex="1"
|
||
ZIndex="1" />
|
||
|
||
<!-- 2. 下方的内容区域,顶部有一条分割线 -->
|
||
<Border
|
||
Grid.Row="1"
|
||
Background="White"
|
||
BorderBrush="{StaticResource BorderBrush}"
|
||
BorderThickness="0,1,0,0"
|
||
KeyboardNavigation.DirectionalNavigation="Contained"
|
||
KeyboardNavigation.TabIndex="2"
|
||
KeyboardNavigation.TabNavigation="Local">
|
||
<ContentPresenter
|
||
x:Name="PART_SelectedContentHost"
|
||
Margin="{TemplateBinding Padding}"
|
||
ContentSource="SelectedContent"
|
||
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||
</Border>
|
||
</Grid>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
|
||
<!-- TabItem 样式 -->
|
||
<!-- 这是实现扁平化风格的核心。它使用 BorderThickness 来创建下划线效果 -->
|
||
<Style TargetType="TabItem">
|
||
<Setter Property="Padding" Value="12,8" />
|
||
<Setter Property="Margin" Value="0,0,5,0" />
|
||
<Setter Property="Foreground" Value="{StaticResource SecondaryTextBrush}" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="TabItem">
|
||
<!-- 我们使用一个Border作为标签的基础,它的下边框将作为指示器 -->
|
||
<Border
|
||
x:Name="Border"
|
||
Margin="{TemplateBinding Margin}"
|
||
Padding="{TemplateBinding Padding}"
|
||
Background="Transparent"
|
||
BorderBrush="Transparent"
|
||
BorderThickness="0,0,0,2">
|
||
<ContentPresenter
|
||
x:Name="ContentSite"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"
|
||
ContentSource="Header" />
|
||
</Border>
|
||
<ControlTemplate.Triggers>
|
||
<!-- 当标签被选中时 -->
|
||
<Trigger Property="IsSelected" Value="True">
|
||
<Setter Property="Foreground" Value="{StaticResource PrimaryBrush}" />
|
||
<!--<Setter Property="FontWeight" Value="SemiBold" />-->
|
||
<!-- 显示彩色的下划线 -->
|
||
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource PrimaryBrush}" />
|
||
</Trigger>
|
||
<!-- 当鼠标悬停在一个未选中的标签上时 -->
|
||
<MultiTrigger>
|
||
<MultiTrigger.Conditions>
|
||
<Condition Property="IsSelected" Value="False" />
|
||
<Condition Property="IsMouseOver" Value="True" />
|
||
</MultiTrigger.Conditions>
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<!-- 显示一条灰色的下划线作为悬停反馈 -->
|
||
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource BorderBrush}" />
|
||
</MultiTrigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
|
||
<!-- TreeView 样式 -->
|
||
<Style TargetType="TreeView">
|
||
<Setter Property="Background" Value="White" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource BorderBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="Padding" Value="4" />
|
||
</Style>
|
||
<!-- TreeViewItem 的展开/折叠按钮 (ToggleButton) 样式 -->
|
||
<Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton">
|
||
<Setter Property="Focusable" Value="False" />
|
||
<Setter Property="HorizontalContentAlignment" Value="Center" />
|
||
<Setter Property="VerticalContentAlignment" Value="Center" />
|
||
<Setter Property="Width" Value="16" />
|
||
<Setter Property="Height" Value="16" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="ToggleButton">
|
||
<Grid
|
||
x:Name="container"
|
||
Width="{TemplateBinding Width}"
|
||
Height="{TemplateBinding Height}"
|
||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
|
||
Background="Transparent"
|
||
RenderTransformOrigin="0.5,0.5">
|
||
<Grid.RenderTransform>
|
||
<RotateTransform Angle="0" />
|
||
</Grid.RenderTransform>
|
||
<!-- 将 Path 包装在 Viewbox 中以实现居中和缩放 -->
|
||
<Viewbox Width="8" Height="8">
|
||
<Path
|
||
x:Name="arrow"
|
||
Data="M 0,0 L 4,4 L 0,8"
|
||
Fill="Transparent"
|
||
Stroke="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType=ToggleButton}}"
|
||
StrokeThickness="1.5" />
|
||
</Viewbox>
|
||
</Grid>
|
||
<ControlTemplate.Triggers>
|
||
<!-- 展开时旋转箭头 -->
|
||
<Trigger Property="IsChecked" Value="True">
|
||
<Setter TargetName="container" Property="RenderTransform">
|
||
<Setter.Value>
|
||
<RotateTransform Angle="90" />
|
||
</Setter.Value>
|
||
</Setter>
|
||
<Setter TargetName="arrow" Property="Stroke" Value="{StaticResource SecondaryTextBrush}" />
|
||
</Trigger>
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter TargetName="arrow" Property="Stroke" Value="{StaticResource TextBrush}" />
|
||
</Trigger>
|
||
<!-- 禁用时的样式 -->
|
||
<Trigger Property="IsEnabled" Value="False">
|
||
<Setter TargetName="arrow" Property="Stroke" Value="{StaticResource DisabledTextBrush}" />
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
<!-- 用于计算子项缩进的辅助转换器 -->
|
||
<local:LeftMarginMultiplier x:Key="LeftMarginMultiplier" />
|
||
<!-- TreeViewItem 的主样式 -->
|
||
<Style TargetType="{x:Type TreeViewItem}">
|
||
<Setter Property="Background" Value="Transparent" />
|
||
<Setter Property="Padding" Value="2,3" />
|
||
<Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
|
||
<Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="{x:Type TreeViewItem}">
|
||
<StackPanel>
|
||
<Border
|
||
x:Name="Bd"
|
||
Padding="{TemplateBinding Padding}"
|
||
Background="{TemplateBinding Background}"
|
||
BorderBrush="{TemplateBinding BorderBrush}"
|
||
BorderThickness="{TemplateBinding BorderThickness}"
|
||
CornerRadius="4">
|
||
<Grid Margin="{Binding Converter={StaticResource LeftMarginMultiplier}, ConverterParameter=19, RelativeSource={RelativeSource TemplatedParent}}">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="Auto" />
|
||
<ColumnDefinition Width="*" />
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<!-- 展开/折叠按钮 -->
|
||
<ToggleButton
|
||
x:Name="Expander"
|
||
ClickMode="Press"
|
||
IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
|
||
Style="{StaticResource ExpandCollapseToggleStyle}" />
|
||
|
||
<!-- 内容 (Header) -->
|
||
<ContentPresenter
|
||
x:Name="PART_Header"
|
||
Grid.Column="1"
|
||
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
|
||
ContentSource="Header"
|
||
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
|
||
</Grid>
|
||
</Border>
|
||
<!-- 子项容器 -->
|
||
<ItemsPresenter x:Name="ItemsHost" Visibility="Collapsed" />
|
||
</StackPanel>
|
||
<ControlTemplate.Triggers>
|
||
<!-- 当有子项时才显示展开按钮 -->
|
||
<Trigger Property="HasItems" Value="false">
|
||
<Setter TargetName="Expander" Property="Visibility" Value="Hidden" />
|
||
</Trigger>
|
||
<!-- 当被展开时,显示子项 -->
|
||
<Trigger Property="IsExpanded" Value="true">
|
||
<Setter TargetName="ItemsHost" Property="Visibility" Value="Visible" />
|
||
</Trigger>
|
||
<!-- 选中时的背景高亮 -->
|
||
<Trigger Property="IsSelected" Value="true">
|
||
<Setter TargetName="Bd" Property="Background" Value="{StaticResource LightBackgroundBrush}" />
|
||
</Trigger>
|
||
<!-- 多选高亮 (用于按下Ctrl键时) -->
|
||
<MultiTrigger>
|
||
<MultiTrigger.Conditions>
|
||
<Condition Property="IsSelected" Value="true" />
|
||
<Condition Property="IsSelectionActive" Value="false" />
|
||
</MultiTrigger.Conditions>
|
||
<Setter TargetName="Bd" Property="Background" Value="{StaticResource BorderBrush}" />
|
||
</MultiTrigger>
|
||
<!-- 禁用时的样式 -->
|
||
<Trigger Property="IsEnabled" Value="false">
|
||
<Setter Property="Foreground" Value="{StaticResource DisabledTextBrush}" />
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
<!-- 窗口容器样式 -->
|
||
<Style x:Key="WindowContainer" TargetType="Border">
|
||
<Setter Property="Background" Value="White" />
|
||
<Setter Property="CornerRadius" Value="8" />
|
||
<Setter Property="Effect">
|
||
<Setter.Value>
|
||
<DropShadowEffect
|
||
BlurRadius="8"
|
||
Opacity="0.1"
|
||
ShadowDepth="2"
|
||
Color="Black" />
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
|
||
<!-- 主内容区域样式 -->
|
||
<Style x:Key="ContentContainer" TargetType="Border">
|
||
<Setter Property="Background" Value="White" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource BorderBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="6" />
|
||
</Style>
|
||
|
||
<!-- CheckBox 样式 -->
|
||
<Style TargetType="CheckBox">
|
||
<Setter Property="Foreground" Value="{StaticResource TextBrush}" />
|
||
<Setter Property="FontSize" Value="12" />
|
||
<Setter Property="VerticalAlignment" Value="Center" />
|
||
<Setter Property="HorizontalContentAlignment" Value="Left" />
|
||
<Setter Property="IsThreeState" Value="False" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="CheckBox">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="Auto" />
|
||
<ColumnDefinition Width="*" />
|
||
</Grid.ColumnDefinitions>
|
||
<Border
|
||
x:Name="Border"
|
||
Grid.Column="0"
|
||
Width="18"
|
||
Height="18"
|
||
Margin="0,0,8,0"
|
||
Background="White"
|
||
BorderBrush="{StaticResource BorderBrush}"
|
||
BorderThickness="1"
|
||
CornerRadius="3">
|
||
<Grid>
|
||
<!-- 选中状态的勾选标记 -->
|
||
<Path
|
||
x:Name="CheckMark"
|
||
Data="M 3,9 L 7,13 L 15,5"
|
||
Fill="Transparent"
|
||
Stroke="White"
|
||
StrokeLineJoin="Round"
|
||
StrokeThickness="2"
|
||
Visibility="Collapsed" />
|
||
|
||
<!-- 不确定状态的标记 -->
|
||
<Rectangle
|
||
x:Name="IndeterminateMark"
|
||
Width="8"
|
||
Height="2"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"
|
||
Fill="White"
|
||
Visibility="Collapsed" />
|
||
</Grid>
|
||
</Border>
|
||
<ContentPresenter
|
||
Grid.Column="1"
|
||
HorizontalAlignment="Left"
|
||
VerticalAlignment="Center"
|
||
ContentSource="Content" />
|
||
</Grid>
|
||
<ControlTemplate.Triggers>
|
||
<!-- 选中状态 -->
|
||
<Trigger Property="IsChecked" Value="True">
|
||
<Setter TargetName="CheckMark" Property="Visibility" Value="Visible" />
|
||
<Setter TargetName="Border" Property="Background" Value="{StaticResource PrimaryBrush}" />
|
||
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource PrimaryBrush}" />
|
||
</Trigger>
|
||
|
||
<!-- 不确定状态 -->
|
||
<Trigger Property="IsChecked" Value="{x:Null}">
|
||
<Setter TargetName="IndeterminateMark" Property="Visibility" Value="Visible" />
|
||
<Setter TargetName="Border" Property="Background" Value="{StaticResource PrimaryBrush}" />
|
||
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource PrimaryBrush}" />
|
||
</Trigger>
|
||
|
||
<!-- 禁用状态 -->
|
||
<Trigger Property="IsEnabled" Value="False">
|
||
<Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBrush}" />
|
||
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBrush}" />
|
||
<Setter TargetName="CheckMark" Property="Stroke" Value="{StaticResource DisabledTextBrush}" />
|
||
<Setter TargetName="IndeterminateMark" Property="Fill" Value="{StaticResource DisabledTextBrush}" />
|
||
</Trigger>
|
||
|
||
<!-- 鼠标悬停状态 -->
|
||
<Trigger Property="IsMouseOver" Value="True">
|
||
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource PrimaryHoverBrush}" />
|
||
</Trigger>
|
||
|
||
<!-- 鼠标悬停且选中状态 -->
|
||
<MultiTrigger>
|
||
<MultiTrigger.Conditions>
|
||
<Condition Property="IsMouseOver" Value="True" />
|
||
<Condition Property="IsChecked" Value="True" />
|
||
</MultiTrigger.Conditions>
|
||
<Setter TargetName="Border" Property="Background" Value="{StaticResource PrimaryHoverBrush}" />
|
||
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource PrimaryHoverBrush}" />
|
||
</MultiTrigger>
|
||
|
||
<!-- 鼠标悬停且不确定状态 -->
|
||
<MultiTrigger>
|
||
<MultiTrigger.Conditions>
|
||
<Condition Property="IsMouseOver" Value="True" />
|
||
<Condition Property="IsChecked" Value="{x:Null}" />
|
||
</MultiTrigger.Conditions>
|
||
<Setter TargetName="Border" Property="Background" Value="{StaticResource PrimaryHoverBrush}" />
|
||
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource PrimaryHoverBrush}" />
|
||
</MultiTrigger>
|
||
|
||
<!-- 按下状态 -->
|
||
<Trigger Property="IsPressed" Value="True">
|
||
<Setter TargetName="Border" Property="Background" Value="{StaticResource PrimaryPressedBrush}" />
|
||
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource PrimaryPressedBrush}" />
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
<!-- ================================================================== -->
|
||
<!-- ContextMenu, MenuItem, and Separator Styles -->
|
||
<!-- ================================================================== -->
|
||
|
||
<!-- 右键菜单中的分隔符样式 -->
|
||
<Style x:Key="ModernContextMenuSeparator" TargetType="Separator">
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="Separator">
|
||
<Rectangle
|
||
Height="1"
|
||
Margin="30,4,4,4"
|
||
Fill="{StaticResource BorderBrush}" />
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
|
||
<!-- 右键菜单 (ContextMenu) 的整体样式 -->
|
||
<Style TargetType="{x:Type ContextMenu}">
|
||
<Setter Property="Background" Value="White" />
|
||
<Setter Property="BorderBrush" Value="{StaticResource BorderBrush}" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="Padding" Value="2" />
|
||
<Setter Property="SnapsToDevicePixels" Value="True" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="{x:Type ContextMenu}">
|
||
<Border
|
||
Background="{TemplateBinding Background}"
|
||
BorderBrush="{TemplateBinding BorderBrush}"
|
||
BorderThickness="{TemplateBinding BorderThickness}"
|
||
CornerRadius="4">
|
||
<Border.Effect>
|
||
<DropShadowEffect
|
||
BlurRadius="4"
|
||
Opacity="0.5"
|
||
ShadowDepth="1"
|
||
Color="#CCCCCC" />
|
||
</Border.Effect>
|
||
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle" />
|
||
</Border>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
</Style>
|
||
|
||
<!-- 菜单项 (MenuItem) 的样式 -->
|
||
<Style TargetType="{x:Type MenuItem}">
|
||
<Setter Property="Height" Value="32" />
|
||
<Setter Property="Padding" Value="8,0" />
|
||
<Setter Property="Template">
|
||
<Setter.Value>
|
||
<ControlTemplate TargetType="{x:Type MenuItem}">
|
||
<Border
|
||
x:Name="Border"
|
||
Margin="3"
|
||
Padding="0"
|
||
CornerRadius="3">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<!-- 定义图标列,宽度固定为30 -->
|
||
<ColumnDefinition Width="30" SharedSizeGroup="Icon" />
|
||
<!-- 定义标题列,自动填充剩余空间 -->
|
||
<ColumnDefinition Width="*" />
|
||
<!-- 定义快捷键列,宽度自动 -->
|
||
<ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut" />
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<!-- 图标内容呈现器 -->
|
||
<ContentPresenter
|
||
x:Name="Icon"
|
||
Margin="6,0"
|
||
VerticalAlignment="Center"
|
||
ContentSource="Icon" />
|
||
|
||
<!-- 标题文本内容呈现器 -->
|
||
<ContentPresenter
|
||
x:Name="HeaderHost"
|
||
Grid.Column="1"
|
||
VerticalAlignment="Center"
|
||
ContentSource="Header" />
|
||
|
||
</Grid>
|
||
</Border>
|
||
<ControlTemplate.Triggers>
|
||
<!-- 鼠标悬停时的高亮效果 -->
|
||
<Trigger Property="IsHighlighted" Value="True">
|
||
<Setter TargetName="Border" Property="Background" Value="{StaticResource LightBackgroundBrush}" />
|
||
</Trigger>
|
||
<!-- 禁用时的样式 -->
|
||
<Trigger Property="IsEnabled" Value="False">
|
||
<Setter Property="Foreground" Value="{StaticResource DisabledTextBrush}" />
|
||
</Trigger>
|
||
</ControlTemplate.Triggers>
|
||
</ControlTemplate>
|
||
</Setter.Value>
|
||
</Setter>
|
||
<!-- 将 ModernContextMenuSeparator 样式应用到 MenuItem 内部的 Separator -->
|
||
<Style.Resources>
|
||
<Style BasedOn="{StaticResource ModernContextMenuSeparator}" TargetType="Separator" />
|
||
</Style.Resources>
|
||
</Style>
|
||
|
||
|
||
</ResourceDictionary> |