livia-test/Livia/Resources/Themes/LiviaTabItem.xaml
2025-03-28 14:31:53 +08:00

236 lines
17 KiB
XML

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes">
<Style x:Key="FocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="2" StrokeDashArray="1 2" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" SnapsToDevicePixels="true" StrokeThickness="1"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Foreground" Value="{Binding (TextElement.Foreground), RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}"/>
<Setter Property="Height" Value="48"/>
<Setter Property="MinWidth" Value="90"/>
<Setter Property="Padding" Value="16,12"/>
<Setter Property="materialDesign:DialogHost.RestoreFocusElement" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabControl}, Mode=FindAncestor}}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<ControlTemplate.Resources>
<Storyboard x:Key="SelectHorizontalTabItem">
<DoubleAnimation Storyboard.TargetName="ScaleTransform"
Storyboard.TargetProperty="ScaleY"
From="0"
To="1"
Duration="0" />
<DoubleAnimation Storyboard.TargetName="ScaleTransform"
Storyboard.TargetProperty="ScaleX"
From="0"
To="1"
Duration="0:0:0.3">
<DoubleAnimation.EasingFunction>
<SineEase EasingMode="EaseOut" />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
<DoubleAnimation BeginTime="0:0:0.3"
Storyboard.TargetName="PART_BackgroundSelection"
Storyboard.TargetProperty="Opacity"
To="0.12"
Duration="0" />
</Storyboard>
<Storyboard x:Key="SelectVerticalTabItem">
<DoubleAnimation Storyboard.TargetName="ScaleTransform"
Storyboard.TargetProperty="ScaleX"
From="0"
To="1"
Duration="0" />
<DoubleAnimation Storyboard.TargetName="ScaleTransform"
Storyboard.TargetProperty="ScaleY"
From="0"
To="1"
Duration="0:0:0.3">
<DoubleAnimation.EasingFunction>
<SineEase EasingMode="EaseOut" />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
<DoubleAnimation BeginTime="0:0:0.3"
Storyboard.TargetName="PART_BackgroundSelection"
Storyboard.TargetProperty="Opacity"
To="0.12"
Duration="0" />
</Storyboard>
</ControlTemplate.Resources>
<Grid x:Name="Root">
<materialDesign:ColorZone x:Name="ColorZoneHeader" Background="{Binding (materialDesign:ColorZoneAssist.Background), RelativeSource={RelativeSource Mode=TemplatedParent}}"
Foreground="{Binding (materialDesign:ColorZoneAssist.Foreground), RelativeSource={RelativeSource Mode=TemplatedParent}}" Focusable="False" HorizontalAlignment="Stretch" Mode="Custom" VerticalAlignment="Stretch">
<materialDesign:Ripple x:Name="contentPresenter"
ContentStringFormat="{TemplateBinding HeaderStringFormat}"
ContentTemplate="{TemplateBinding HeaderTemplate}"
Content="{TemplateBinding Header}"
ContentTemplateSelector="{TemplateBinding HeaderTemplateSelector}"
Focusable="False"
TextBlock.FontWeight="Medium"
TextBlock.FontSize="14"
TextBlock.Foreground="{StaticResource PrimaryTextColorBrush}"
HorizontalContentAlignment="Center" Opacity=".82"
Padding="{TemplateBinding Padding}" RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalContentAlignment="Center"/>
</materialDesign:ColorZone>
<Border x:Name="SelectionHighlightBorder" BorderBrush="{Binding Foreground, ElementName=ColorZoneHeader}" BorderThickness="0,0,0,2" RenderTransformOrigin="0.5,0.5" Visibility="Hidden">
<Border.RenderTransform>
<ScaleTransform x:Name="ScaleTransform" ScaleX="0" ScaleY="0"/>
</Border.RenderTransform>
<Rectangle x:Name="PART_BackgroundSelection" Fill="{TemplateBinding Background}" IsHitTestVisible="False" Opacity="0.0"/>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.38"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Visibility" TargetName="SelectionHighlightBorder" Value="Visible"/>
<Setter Property="Opacity" TargetName="contentPresenter" Value="1"/>
<Setter Property="Foreground" TargetName="contentPresenter" Value="{StaticResource White1Brush}"/>
<Setter Property="materialDesign:RippleAssist.IsDisabled" TargetName="contentPresenter" Value="True"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ColorZoneHeader" Property="Cursor" Value="Hand"></Setter>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="False"></Condition>
<Condition Property="IsMouseOver" Value="True"></Condition>
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter TargetName="ColorZoneHeader" Property="Foreground" Value="{StaticResource White1Brush}"></Setter>
<Setter TargetName="contentPresenter" Property="Foreground" Value="{StaticResource White1Brush}"></Setter>
</MultiTrigger.Setters>
</MultiTrigger>
<DataTrigger Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Bottom">
<Setter Property="BorderThickness" TargetName="SelectionHighlightBorder" Value="0,2,0,0"/>
</DataTrigger>
<DataTrigger Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Left">
<Setter Property="BorderThickness" TargetName="SelectionHighlightBorder" Value="0,0,2,0"/>
</DataTrigger>
<DataTrigger Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Right">
<Setter Property="BorderThickness" TargetName="SelectionHighlightBorder" Value="2,0,0,0"/>
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Mode=Self}}" Value="True"/>
<Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Top"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource SelectHorizontalTabItem}"/>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Mode=Self}}" Value="True"/>
<Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Bottom"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource SelectHorizontalTabItem}"/>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Mode=Self}}" Value="True"/>
<Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Left"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource SelectVerticalTabItem}"/>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Mode=Self}}" Value="True"/>
<Condition Binding="{Binding TabStripPlacement, RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}" Value="Right"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource SelectVerticalTabItem}"/>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
<Trigger Property="materialDesign:TabAssist.HasFilledTab" Value="False">
<Setter Property="materialDesign:ColorZoneAssist.Foreground" TargetName="ColorZoneHeader" Value="{DynamicResource MaterialDesignBody}"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="materialDesign:TabAssist.HasFilledTab" Value="False"/>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="materialDesign:ColorZoneAssist.Mode" Value="Standard"/>
</MultiTrigger.Conditions>
<Setter Property="materialDesign:ColorZoneAssist.Foreground" TargetName="ColorZoneHeader" Value="{DynamicResource MaterialDesignBody}"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="materialDesign:TabAssist.HasFilledTab" Value="False"/>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="materialDesign:ColorZoneAssist.Mode" Value="PrimaryLight"/>
</MultiTrigger.Conditions>
<Setter Property="materialDesign:ColorZoneAssist.Foreground" TargetName="ColorZoneHeader" Value="{DynamicResource PrimaryHueLightBrush}"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="materialDesign:TabAssist.HasFilledTab" Value="False"/>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="materialDesign:ColorZoneAssist.Mode" Value="PrimaryMid"/>
</MultiTrigger.Conditions>
<Setter Property="materialDesign:ColorZoneAssist.Foreground" TargetName="ColorZoneHeader" Value="{DynamicResource PrimaryHueMidBrush}"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="materialDesign:TabAssist.HasFilledTab" Value="False"/>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="materialDesign:ColorZoneAssist.Mode" Value="PrimaryDark"/>
</MultiTrigger.Conditions>
<Setter Property="materialDesign:ColorZoneAssist.Foreground" TargetName="ColorZoneHeader" Value="{DynamicResource PrimaryHueDarkBrush}"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="materialDesign:TabAssist.HasFilledTab" Value="False"/>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="materialDesign:ColorZoneAssist.Mode" Value="SecondaryLight"/>
</MultiTrigger.Conditions>
<Setter Property="materialDesign:ColorZoneAssist.Foreground" TargetName="ColorZoneHeader" Value="{DynamicResource SecondaryHueLightBrush}"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="materialDesign:TabAssist.HasFilledTab" Value="False"/>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="materialDesign:ColorZoneAssist.Mode" Value="SecondaryMid"/>
</MultiTrigger.Conditions>
<Setter Property="materialDesign:ColorZoneAssist.Foreground" TargetName="ColorZoneHeader" Value="{DynamicResource SecondaryHueMidBrush}"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="materialDesign:TabAssist.HasFilledTab" Value="False"/>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="materialDesign:ColorZoneAssist.Mode" Value="SecondaryDark"/>
</MultiTrigger.Conditions>
<Setter Property="materialDesign:ColorZoneAssist.Foreground" TargetName="ColorZoneHeader" Value="{DynamicResource SecondaryHueDarkBrush}"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="materialDesign:TabAssist.HasFilledTab" Value="False"/>
<Condition Property="IsSelected" Value="True"/>
<Condition Property="materialDesign:ColorZoneAssist.Mode" Value="Custom"/>
</MultiTrigger.Conditions>
<Setter Property="materialDesign:ColorZoneAssist.Foreground" TargetName="ColorZoneHeader" Value="{Binding (materialDesign:ColorZoneAssist.Foreground), RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="materialDesign:ColorZoneAssist.Background" Value="Transparent"/>
<Setter Property="materialDesign:ColorZoneAssist.Foreground" Value="{Binding (materialDesign:ColorZoneAssist.Foreground), RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}"/>
<Setter Property="materialDesign:ColorZoneAssist.Mode" Value="{Binding (materialDesign:ColorZoneAssist.Mode), RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}"/>
<Setter Property="materialDesign:RippleAssist.Feedback" Value="{DynamicResource MaterialDesignFlatButtonRipple}"/>
<Setter Property="materialDesign:TabAssist.HasFilledTab" Value="{Binding (materialDesign:TabAssist.HasFilledTab), RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}"/>
</Style>
</ResourceDictionary>