2025-12-23 14:12:21 +08:00

512 lines
24 KiB
XML

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- Typography -->
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="{StaticResource TextBrushPrimary}"/>
<Setter Property="FontFamily" Value="{StaticResource AppFontFamily}"/>
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
<!-- Window -->
<Style TargetType="Window">
<Setter Property="Background" Value="{StaticResource SurfaceBrush}"/>
<Setter Property="FontFamily" Value="{StaticResource AppFontFamily}"/>
<Setter Property="Foreground" Value="{StaticResource TextBrushPrimary}"/>
</Style>
<!-- Card container -->
<Style x:Key="CardStyle" TargetType="Border">
<Setter Property="Background" Value="{StaticResource CardBrush}"/>
<Setter Property="CornerRadius" Value="{StaticResource CardCornerRadius}"/>
<Setter Property="BorderBrush" Value="{StaticResource SubtleBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="{StaticResource CardPadding}"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="#22000000"
BlurRadius="8"
ShadowDepth="1"
Opacity="0.35"/>
</Setter.Value>
</Setter>
</Style>
<!-- Buttons -->
<Style x:Key="BaseButtonStyle" TargetType="Button">
<Setter Property="Height" Value="40"/>
<Setter Property="Padding" Value="14,10"/>
<Setter Property="Margin" Value="0"/>
<Setter Property="Background" Value="{StaticResource SurfaceAltBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource BorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="{StaticResource TextBrushPrimary}"/>
<Setter Property="FontFamily" Value="{StaticResource AppFontFamily}"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Root"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{StaticResource ControlCornerRadius}">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Root" Property="Background" Value="{StaticResource SurfaceBrush}"/>
<Setter Property="BorderBrush" TargetName="Root" Value="{StaticResource AccentBrushMuted}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Root" Property="Background" Value="{StaticResource AccentBrushMuted}"/>
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Root" Property="Opacity" Value="0.6"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="PrimaryButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Background" Value="{StaticResource AccentBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Root"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{StaticResource ControlCornerRadius}">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Root" Property="Background" Value="{StaticResource AccentBrushMuted}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Root" Property="Background" Value="{StaticResource AccentBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Root" Property="Opacity" Value="0.6"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="GhostButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="{StaticResource BorderBrush}"/>
</Style>
<!-- TextBox -->
<Style TargetType="TextBox">
<Setter Property="Height" Value="40"/>
<Setter Property="Padding" Value="12,8"/>
<Setter Property="Background" Value="{StaticResource InputBackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource InputBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="FontFamily" Value="{StaticResource AppFontFamily}"/>
<Setter Property="Foreground" Value="{StaticResource TextBrushPrimary}"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Border x:Name="Root"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{StaticResource ControlCornerRadius}">
<ScrollViewer x:Name="PART_ContentHost" Margin="0"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
<Setter TargetName="Root" Property="BorderThickness" Value="2"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Root" Property="Opacity" Value="0.6"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ComboBox -->
<Style TargetType="ComboBox">
<Setter Property="Height" Value="40"/>
<Setter Property="Padding" Value="12,6"/>
<Setter Property="Background" Value="{StaticResource InputBackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource InputBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="FontFamily" Value="{StaticResource AppFontFamily}"/>
<Setter Property="Foreground" Value="{StaticResource TextBrushPrimary}"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<Border x:Name="Root"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{StaticResource ControlCornerRadius}"
SnapsToDevicePixels="True"
Cursor="Hand">
<Grid>
<ToggleButton x:Name="MainToggleButton"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="Transparent"
BorderThickness="0"
Focusable="False"
Cursor="Hand"
IsChecked="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}">
<ToggleButton.Template>
<ControlTemplate TargetType="ToggleButton">
<Border Background="Transparent" BorderThickness="0" Cursor="Hand"/>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
<DockPanel IsHitTestVisible="False">
<ContentPresenter x:Name="ContentSite"
Margin="12,0,8,0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"/>
<ToggleButton DockPanel.Dock="Right"
Width="28"
Focusable="False"
HorizontalAlignment="Right"
Template="{DynamicResource ComboBoxToggleButton}"
IsChecked="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
</DockPanel>
</Grid>
</Border>
<Popup x:Name="PART_Popup"
Placement="Bottom"
AllowsTransparency="True"
Focusable="True"
IsHitTestVisible="True"
IsOpen="{TemplateBinding IsDropDownOpen}"
PopupAnimation="Fade">
<Grid MaxHeight="320" Margin="0,4,0,0" IsHitTestVisible="True">
<Border Background="{StaticResource CardBrush}"
BorderBrush="{StaticResource SubtleBorderBrush}"
BorderThickness="1"
CornerRadius="12"
Width="{Binding ActualWidth, RelativeSource={RelativeSource TemplatedParent}}"
Padding="2"
IsHitTestVisible="True">
<Border.Effect>
<DropShadowEffect Color="#40000000"
BlurRadius="16"
ShadowDepth="4"
Opacity="0.4"
Direction="270"/>
</Border.Effect>
<ScrollViewer Margin="0"
SnapsToDevicePixels="True"
VerticalScrollBarVisibility="Auto"
IsHitTestVisible="True"
CanContentScroll="False">
<ItemsPresenter/>
</ScrollViewer>
</Border>
</Grid>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrushMuted}"/>
</Trigger>
<Trigger Property="IsKeyboardFocused" Value="True">
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
<Setter TargetName="Root" Property="BorderThickness" Value="2"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Root" Property="Opacity" Value="0.6"/>
</Trigger>
<Trigger Property="IsDropDownOpen" Value="True">
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ComboBoxItem">
<Setter Property="Padding" Value="14,10"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Margin" Value="2,1"/>
<Setter Property="IsHitTestVisible" Value="True"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Border x:Name="Root"
Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}"
CornerRadius="8"
SnapsToDevicePixels="True"
IsHitTestVisible="True"
Cursor="Hand">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Root" Property="Background" Value="{StaticResource SurfaceAltBrush}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Root" Property="Background" Value="{StaticResource AccentBrush}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontWeight" Value="SemiBold"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Root" Property="Opacity" Value="0.5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
<!-- Toggle button used inside ComboBox -->
<ControlTemplate x:Key="ComboBoxToggleButton" TargetType="ToggleButton">
<Border x:Name="Border"
Background="Transparent"
Padding="8,4,16,4"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="0"
CornerRadius="{StaticResource ControlCornerRadius}">
<Path x:Name="Arrow"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Data="M 0 0 L 5 5 L 10 0 Z"
Fill="{StaticResource TextBrushSecondary}"
Stretch="Uniform"
Width="10"
Height="5"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Arrow" Property="Fill" Value="{StaticResource AccentBrush}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="Arrow" Property="Fill" Value="{StaticResource AccentBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<!-- Navigation tab control -->
<Style x:Key="TopNavTabControlStyle" TargetType="TabControl">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="UseLayoutRounding" Value="True"/>
<Setter Property="Margin" Value="0"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="ClipToBounds" Value="False"/>
<Setter Property="Width" Value="Auto"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabControl">
<Grid ClipToBounds="False" HorizontalAlignment="Left">
<TabPanel x:Name="HeaderPanel"
Panel.ZIndex="1"
IsItemsHost="True"
Margin="8,4,0,4"
HorizontalAlignment="Left"
ClipToBounds="False"
Background="Transparent"
UseLayoutRounding="False"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="TopNavTabItemStyle" TargetType="TabItem">
<Setter Property="Height" Value="36"/>
<Setter Property="MinWidth" Value="130"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Padding" Value="18,8"/>
<Setter Property="Foreground" Value="{StaticResource TextBrushSecondary}"/>
<Setter Property="Margin" Value="0,0,24,0"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="UseLayoutRounding" Value="True"/>
<Setter Property="Panel.ZIndex" Value="0"/>
<Setter Property="ClipToBounds" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<Grid ClipToBounds="False">
<Border x:Name="Root"
Background="Transparent"
BorderBrush="{StaticResource SubtleBorderBrush}"
BorderThickness="1"
CornerRadius="0"
Padding="{TemplateBinding Padding}"
ClipToBounds="False">
<ContentPresenter ContentSource="Header"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrushMuted}"/>
<Setter TargetName="Root" Property="Background" Value="{StaticResource SurfaceAltBrush}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Root" Property="Background" Value="{StaticResource AccentBrush}"/>
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Panel.ZIndex" Value="10"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Root" Property="Opacity" Value="0.6"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ListBox -->
<Style TargetType="ListBox">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
</Style>
<!-- Navigation ListBox style -->
<Style x:Key="TopNavListBoxStyle" TargetType="ListBox">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Disabled"/>
</Style>
<!-- Navigation ListBoxItem style -->
<Style x:Key="TopNavListBoxItemStyle" TargetType="ListBoxItem">
<Setter Property="Height" Value="36"/>
<Setter Property="MinWidth" Value="130"/>
<Setter Property="Margin" Value="0,0,12,0"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="{StaticResource SubtleBorderBrush}"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<Setter Property="ClipToBounds" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border x:Name="Root"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="18"
Padding="0"
ClipToBounds="False">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrushMuted}"/>
<Setter TargetName="Root" Property="Background" Value="{StaticResource SurfaceAltBrush}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Root" Property="Background" Value="{StaticResource AccentBrush}"/>
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Root" Property="Opacity" Value="0.6"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="SelectorListBoxItemStyle" TargetType="ListBoxItem">
<Setter Property="Height" Value="44"/>
<Setter Property="Padding" Value="12,6"/>
<Setter Property="Margin" Value="0,4,0,0"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Background" Value="{StaticResource SurfaceAltBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="{StaticResource SubtleBorderBrush}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border x:Name="Root"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{StaticResource ControlCornerRadius}"
Padding="{TemplateBinding Padding}">
<ContentPresenter VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrushMuted}"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="Root" Property="Background" Value="{StaticResource AccentBrush}"/>
<Setter Property="Foreground" Value="White"/>
<Setter TargetName="Root" Property="BorderBrush" Value="{StaticResource AccentBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- Labels -->
<Style x:Key="SectionHeaderTextStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="16"/>
<Setter Property="FontWeight" Value="SemiBold"/>
<Setter Property="Foreground" Value="{StaticResource TextBrushPrimary}"/>
<Setter Property="Margin" Value="0,0,0,12"/>
</Style>
<Style x:Key="CaptionTextStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="12"/>
<Setter Property="Foreground" Value="{StaticResource TextBrushSecondary}"/>
</Style>
</ResourceDictionary>