Files
ShrlAlgoToolkit/NeuWPF/NeuWPF/Controls/ButtonsStyle.xaml

333 lines
18 KiB
Plaintext
Raw Normal View History

2025-07-31 20:12:01 +08:00
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
2025-08-12 23:08:54 +08:00
xmlns:assists="clr-namespace:NeuWPF.Assists"
xmlns:controls="clr-namespace:NeuWPF.Controls"
2025-07-31 20:12:24 +08:00
xmlns:svd="clr-namespace:NeuWPF.Controls.Decorations"
2025-07-31 20:12:01 +08:00
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- 按钮高亮 -->
2025-07-11 09:20:23 +08:00
<Storyboard x:Key="Button.FocusEffect">
2025-07-31 20:12:01 +08:00
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetName="border"
Storyboard.TargetProperty="Intensity"
To="1" />
<DoubleAnimation
Duration="0"
Storyboard.TargetName="border"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
To="1.01" />
<DoubleAnimation
Duration="0"
Storyboard.TargetName="border"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
To="1.01" />
<BooleanAnimationUsingKeyFrames
Duration="0"
Storyboard.TargetName="border"
Storyboard.TargetProperty="ShaderEnabled">
2025-07-11 09:20:23 +08:00
<DiscreteBooleanKeyFrame KeyTime="0" Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
2025-07-31 20:12:01 +08:00
<!-- 按钮取消高亮 -->
2025-07-11 09:20:23 +08:00
<Storyboard x:Key="Button.LeaveEffect">
2025-07-31 20:12:01 +08:00
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetName="border"
Storyboard.TargetProperty="Intensity"
To="0" />
<DoubleAnimation
Duration="0"
Storyboard.TargetName="border"
2025-07-31 20:12:24 +08:00
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
2025-07-31 20:12:01 +08:00
To="1" />
<DoubleAnimation
Duration="0"
Storyboard.TargetName="border"
2025-07-31 20:12:24 +08:00
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
2025-07-31 20:12:01 +08:00
To="1" />
<BooleanAnimationUsingKeyFrames
Duration="0:0:0.2"
Storyboard.TargetName="border"
Storyboard.TargetProperty="ShaderEnabled">
2025-07-11 09:20:23 +08:00
<DiscreteBooleanKeyFrame KeyTime="0:0:0.2" Value="False" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
2025-07-31 20:12:01 +08:00
<!-- 按钮按下 -->
2025-07-11 09:20:23 +08:00
<Storyboard x:Key="Button.PressEffect">
2025-07-31 20:12:01 +08:00
<DoubleAnimation
Duration="0"
Storyboard.TargetName="border"
2025-07-31 20:12:24 +08:00
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"
2025-07-31 20:12:01 +08:00
To="0.99" />
<DoubleAnimation
Duration="0"
Storyboard.TargetName="border"
2025-07-31 20:12:24 +08:00
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"
2025-07-31 20:12:01 +08:00
To="0.99" />
<DoubleAnimation
Duration="0"
Storyboard.TargetName="border"
Storyboard.TargetProperty="Intensity"
To="0.5" />
2025-07-11 09:20:23 +08:00
</Storyboard>
2025-08-12 23:08:54 +08:00
<!-- 拟态按钮,按下后显示深度效果 -->
<Style TargetType="{x:Type Button}" x:Key="NeuMorphicButtonStyle">
2025-07-11 09:20:23 +08:00
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
2025-08-12 23:08:54 +08:00
<Setter Property="Background" Value="{DynamicResource ControlBackgroundNormalBrush}" />
<Setter Property="Foreground" Value="{DynamicResource TextPrimaryBrush}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Padding" Value="20,10" />
<Setter Property="FontSize" Value="14" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<svd:EmbossBorder
Background="{TemplateBinding Background}"
BorderThickness="{TemplateBinding BorderThickness}"
Intensity="0.5"
ShaderEnabled="True"
x:Name="emboss" />
<svd:SlotBorder
Background="{TemplateBinding Background}"
Intensity="0"
Margin="0"
ShaderEnabled="False"
x:Name="slot">
<ContentPresenter
Focusable="False"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
x:Name="contentPresenter" />
</svd:SlotBorder>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Button.IsDefaulted" Value="True" />
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Intensity" TargetName="emboss" Value="1" />
<!--<Setter Property="BorderThickness" Value="1" />-->
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="ShaderEnabled" TargetName="slot" Value="True" />
<Setter Property="Intensity" TargetName="slot" Value="0.6" />
<Setter Property="Intensity" TargetName="emboss" Value="0" />
<Setter Property="Foreground" TargetName="slot" Value="{DynamicResource TextSecondaryBrush}" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" TargetName="emboss" Value="{DynamicResource ControlBackgroundDisabledBrush}" />
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{DynamicResource TextDisabledBrush}" />
<Setter Property="ShaderEnabled" TargetName="emboss" Value="False" />
</Trigger>
2025-07-11 09:20:23 +08:00
2025-08-12 23:08:54 +08:00
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- 普通按钮,浮动 -->
<Style TargetType="{x:Type ButtonBase}" x:Key="ButtonBasic">
<Setter Property="FocusVisualStyle" Value="{DynamicResource FocusVisual}" />
<Setter Property="Background" Value="{DynamicResource ControlBackgroundNormalBrush}" />
<Setter Property="Foreground" Value="{DynamicResource TextPrimaryBrush}" />
<Setter Property="BorderBrush" Value="{DynamicResource BorderNormalBrush}" />
<Setter Property="assists:ShadingAssist.LightShadowBrush" Value="{DynamicResource LightShadowBrush}" />
<Setter Property="assists:ShadingAssist.DarkShadowBrush" Value="{DynamicResource DarkShadowBrush}" />
<Setter Property="assists:ShadingAssist.DisabledBackground" Value="{DynamicResource ControlBackgroundDisabledBrush}" />
<Setter Property="assists:ShadingAssist.DisabledForeground" Value="{DynamicResource TextDisabledBrush}" />
<Setter Property="assists:ShadingAssist.LightedBorder" Value="{DynamicResource BorderGradientBrush}" />
2025-07-11 09:20:23 +08:00
<Setter Property="BorderThickness" Value="1" />
<Setter Property="FontSize" Value="14" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="Padding" Value="20,8" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ButtonBase}">
2025-07-31 20:12:01 +08:00
<svd:EmbossBorder
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="4"
2025-08-12 23:08:54 +08:00
LightShadowBrush="{Binding Path=(assists:ShadingAssist.LightShadowBrush), RelativeSource={RelativeSource TemplatedParent}}"
2025-07-31 20:12:01 +08:00
Intensity="0"
2025-08-12 23:08:54 +08:00
Margin="0"
2025-07-31 20:12:01 +08:00
RenderTransformOrigin="0.5,0.5"
ShaderEnabled="False"
2025-08-12 23:08:54 +08:00
DarkShadowBrush="{Binding Path=(assists:ShadingAssist.DarkShadowBrush), RelativeSource={RelativeSource TemplatedParent}}"
SnapsToDevicePixels="True"
2025-07-31 20:12:01 +08:00
x:Name="border">
<ContentPresenter
Focusable="False"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
TextElement.Foreground="{TemplateBinding Foreground}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
x:Name="contentPresenter" />
2025-07-11 09:20:23 +08:00
<svd:EmbossBorder.RenderTransform>
<TransformGroup>
<ScaleTransform />
<SkewTransform />
<RotateTransform />
<TranslateTransform />
</TransformGroup>
</svd:EmbossBorder.RenderTransform>
</svd:EmbossBorder>
<ControlTemplate.Triggers>
2025-08-12 23:08:54 +08:00
<!--<Trigger Property="IsDefaulted" Value="True">
2025-07-11 09:20:23 +08:00
<Setter Property="BorderBrush" TargetName="border"
Value="{StaticResource PrimaryBrush}" />
</Trigger>-->
2025-07-31 20:12:01 +08:00
<!-- 切换边框效果,显示阴影 -->
2025-08-12 23:08:54 +08:00
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" TargetName="border" Value="{Binding Path=(assists:ShadingAssist.LightedBorder), RelativeSource={RelativeSource TemplatedParent}}" />
2025-07-11 09:20:23 +08:00
<Trigger.EnterActions>
2025-07-31 20:12:01 +08:00
<BeginStoryboard Storyboard="{StaticResource Button.FocusEffect}" x:Name="showEffectBegin" />
2025-07-11 09:20:23 +08:00
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource Button.LeaveEffect}" />
</Trigger.ExitActions>
</Trigger>
2025-07-31 20:12:01 +08:00
<!-- 缩减阴影,下压效果 -->
2025-08-12 23:08:54 +08:00
<Trigger Property="IsPressed" Value="True">
2025-07-11 09:20:23 +08:00
<Trigger.EnterActions>
2025-07-31 20:12:01 +08:00
<BeginStoryboard Storyboard="{StaticResource Button.PressEffect}" x:Name="pressBegin" />
2025-07-11 09:20:23 +08:00
</Trigger.EnterActions>
<Trigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="pressBegin" />
</Trigger.ExitActions>
</Trigger>
2025-07-31 20:12:01 +08:00
<!-- 按钮禁用效果 -->
2025-07-11 09:20:23 +08:00
<Trigger Property="IsEnabled" Value="false">
2025-08-12 23:08:54 +08:00
<Setter Property="Background" TargetName="border" Value="{Binding Path=(assists:ShadingAssist.DisabledBackground), RelativeSource={RelativeSource TemplatedParent}}" />
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{Binding Path=(assists:ShadingAssist.DisabledForeground), RelativeSource={RelativeSource TemplatedParent}}" />
2025-07-11 09:20:23 +08:00
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
2025-07-31 20:12:01 +08:00
<!-- 默认按钮 -->
2025-08-12 23:08:54 +08:00
<Style BasedOn="{StaticResource ButtonBasic}" TargetType="{x:Type Button}" />
2025-07-31 20:12:01 +08:00
<!-- 主要按钮 -->
<Style
2025-08-12 23:08:54 +08:00
BasedOn="{StaticResource ButtonBasic}"
2025-07-31 20:12:01 +08:00
TargetType="{x:Type Button}"
x:Key="ButtonPrimary">
2025-08-12 23:08:54 +08:00
<Setter Property="Foreground" Value="{DynamicResource TextOnAccentPrimaryBrush}" />
<Setter Property="Background" Value="{DynamicResource PrimaryNormalBrush}" />
2025-07-11 09:20:23 +08:00
<Setter Property="BorderBrush" Value="Transparent" />
2025-08-12 23:08:54 +08:00
<Setter Property="assists:ShadingAssist.LightShadowBrush" Value="{DynamicResource PrimaryLightShadowBrush}" />
<Setter Property="assists:ShadingAssist.DarkShadowBrush" Value="{DynamicResource PrimaryDarkShadowBrush}" />
<Setter Property="assists:ShadingAssist.DisabledBackground" Value="{DynamicResource PrimaryDisabledBrush}" />
<Setter Property="assists:ShadingAssist.DisabledForeground" Value="{DynamicResource TextOnAccentDisabledBrush}" />
<Setter Property="assists:ShadingAssist.LightedBorder">
<Setter.Value>
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
<GradientStop Color="{DynamicResource PrimaryDefaultColor}" Offset="0" />
<GradientStop Color="Transparent" Offset="0.5" />
<LinearGradientBrush.RelativeTransform>
<RotateTransform Angle="45" CenterX="0.5" CenterY="0.5" />
</LinearGradientBrush.RelativeTransform>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
<!-- 危险按钮 -->
<Style
BasedOn="{StaticResource ResourceKey=ButtonPrimary}"
TargetType="{x:Type Button}"
x:Key="ButtonInfo">
<Setter Property="Background" Value="{DynamicResource InfoBrush}" />
2025-07-11 09:20:23 +08:00
2025-08-12 23:08:54 +08:00
<Setter Property="assists:ShadingAssist.LightShadowBrush" Value="{DynamicResource InfoLightShadowBrush}" />
<Setter Property="assists:ShadingAssist.DarkShadowBrush" Value="{DynamicResource InfoDarkShadowBrush}" />
<Setter Property="assists:ShadingAssist.DisabledBackground" Value="{DynamicResource InfoDisabledBrush}" />
<Setter Property="assists:ShadingAssist.LightedBorder">
2025-07-11 09:20:23 +08:00
<Setter.Value>
2025-07-31 20:12:01 +08:00
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
2025-08-12 23:08:54 +08:00
<GradientStop Color="{DynamicResource InfoColor}" Offset="0" />
2025-07-11 09:20:23 +08:00
<GradientStop Color="Transparent" Offset="0.5" />
<LinearGradientBrush.RelativeTransform>
<RotateTransform Angle="45" CenterX="0.5" CenterY="0.5" />
</LinearGradientBrush.RelativeTransform>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
2025-07-31 20:12:01 +08:00
<!-- 危险按钮 -->
<Style
BasedOn="{StaticResource ResourceKey=ButtonPrimary}"
TargetType="{x:Type Button}"
x:Key="ButtonDanger">
2025-08-12 23:08:54 +08:00
<Setter Property="Background" Value="{DynamicResource ErrorBrush}" />
<Setter Property="assists:ShadingAssist.LightShadowBrush" Value="{DynamicResource ErrorLightShadowBrush}" />
<Setter Property="assists:ShadingAssist.DarkShadowBrush" Value="{DynamicResource ErrorDarkShadowBrush}" />
<Setter Property="assists:ShadingAssist.DisabledBackground" Value="{DynamicResource ErrorDisabledBrush}" />
<Setter Property="assists:ShadingAssist.LightedBorder">
<Setter.Value>
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
<GradientStop Color="{DynamicResource ErrorColor}" Offset="0" />
<GradientStop Color="Transparent" Offset="0.5" />
<LinearGradientBrush.RelativeTransform>
<RotateTransform Angle="45" CenterX="0.5" CenterY="0.5" />
</LinearGradientBrush.RelativeTransform>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
<!-- 警告按钮 -->
<Style
BasedOn="{StaticResource ResourceKey=ButtonPrimary}"
TargetType="{x:Type Button}"
x:Key="ButtonWarning">
<Setter Property="Background" Value="{DynamicResource WarningBrush}" />
2025-07-11 09:20:23 +08:00
2025-08-12 23:08:54 +08:00
<Setter Property="assists:ShadingAssist.LightShadowBrush" Value="{DynamicResource WarningLightShadowBrush}" />
<Setter Property="assists:ShadingAssist.DarkShadowBrush" Value="{DynamicResource WarningDarkShadowBrush}" />
<Setter Property="assists:ShadingAssist.DisabledBackground" Value="{DynamicResource WarningDisabledBrush}" />
<Setter Property="assists:ShadingAssist.LightedBorder">
2025-07-11 09:20:23 +08:00
<Setter.Value>
2025-07-31 20:12:01 +08:00
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
2025-08-12 23:08:54 +08:00
<GradientStop Color="{DynamicResource WarningColor}" Offset="0" />
2025-07-11 09:20:23 +08:00
<GradientStop Color="Transparent" Offset="0.5" />
<LinearGradientBrush.RelativeTransform>
<RotateTransform Angle="45" CenterX="0.5" CenterY="0.5" />
</LinearGradientBrush.RelativeTransform>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
2025-07-31 20:12:01 +08:00
<!-- 成功按钮 -->
<Style
BasedOn="{StaticResource ResourceKey=ButtonPrimary}"
TargetType="{x:Type Button}"
x:Key="ButtonSuccess">
2025-08-12 23:08:54 +08:00
<Setter Property="Background" Value="{DynamicResource SuccessBrush}" />
<Setter Property="assists:ShadingAssist.LightShadowBrush" Value="{DynamicResource SuccessLightShadowBrush}" />
<Setter Property="assists:ShadingAssist.DarkShadowBrush" Value="{DynamicResource SuccessDarkShadowBrush}" />
<Setter Property="assists:ShadingAssist.DisabledBackground" Value="{DynamicResource SuccessDisabledBrush}" />
<Setter Property="assists:ShadingAssist.LightedBorder">
2025-07-11 09:20:23 +08:00
<Setter.Value>
2025-07-31 20:12:01 +08:00
<LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
2025-08-12 23:08:54 +08:00
<GradientStop Color="{DynamicResource SuccessColor}" Offset="0" />
2025-07-11 09:20:23 +08:00
<GradientStop Color="Transparent" Offset="0.5" />
<LinearGradientBrush.RelativeTransform>
<RotateTransform Angle="45" CenterX="0.5" CenterY="0.5" />
</LinearGradientBrush.RelativeTransform>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
2025-07-31 20:12:01 +08:00
<!-- 重复按钮 -->
<Style BasedOn="{StaticResource ButtonBasic}" TargetType="{x:Type RepeatButton}" />
2025-07-11 09:20:23 +08:00
</ResourceDictionary>