Style类
一、Style 是什么?
Style = WPF 控件的 “CSS 样式表”
作用:统一设置控件的属性、外观、行为,实现:
作用:统一设置控件的属性、外观、行为,实现:
- 界面统一
- 代码复用
- 便于维护
- 解耦界面与样式
一句话:
一个 Style,给 N 个控件用,改一处,全部变!
一个 Style,给 N 个控件用,改一处,全部变!
二、Style 类的 4 个核心属性
1 public class Style : DispatcherObject, INameScope, IHaveResources 2 { 3 // 目标控件类型(必须写!例如 Button、TextBlock) 4 public Type TargetType { get; set; } 5 6 // 样式名字(用来引用) 7 public string ResourceKey { get; set; } 8 9 // 继承自哪个样式 10 public Style BasedOn { get; set; } 11 12 // 属性集合(设置控件属性) 13 public SetterBaseCollection Setters { get; } 14 15 // 触发器(鼠标悬浮、选中、禁用等) 16 public TriggerCollection Triggers { get; } 17 }
最关键的 4 个:
- TargetType → 目标控件类型
- x:Key → 样式名字
- Setters → 设置属性
- Triggers → 交互效果
三、最基础示例:给 Button 定义样式
1. 定义 Style(放在 Resources 里)
1 <Window.Resources> 2 <!-- 定义样式:给 Button 使用 --> 3 <Style x:Key="MyButtonStyle" TargetType="Button"> 4 <!-- 设置属性 --> 5 <Setter Property="FontSize" Value="18"/> 6 <Setter Property="Foreground" Value="White"/> 7 <Setter Property="Background" Value="CornflowerBlue"/> 8 <Setter Property="Padding" Value="10,5"/> 9 <Setter Property="Margin" Value="5"/> 10 </Style> 11 </Window.Resources>
2. 使用 Style
1 <!-- 引用样式 --> 2 <Button Style="{StaticResource MyButtonStyle}" Content="按钮1"/> 3 <Button Style="{StaticResource MyButtonStyle}" Content="按钮2"/> 4 <Button Style="{StaticResource MyButtonStyle}" Content="按钮3"/>
效果
三个按钮外观完全一样,修改 Style 里的颜色,所有按钮同步变化。
四、不带 x:Key → 自动应用样式
如果不写
x:Key,此类型的所有控件自动应用该样式!1 <Window.Resources> 2 <!-- 无 x:Key → 所有 Button 自动使用 --> 3 <Style TargetType="Button"> 4 <Setter Property="FontSize" Value="18"/> 5 <Setter Property="Background" Value="LightGreen"/> 6 </Style> 7 </Window.Resources>
使用:
1 <!-- 不用写 Style="",自动应用! --> 2 <Button Content="按钮1"/> 3 <Button Content="按钮2"/>
超级方便!
五、样式继承(BasedOn)
可以让一个样式继承另一个样式,实现扩展。
1 <Window.Resources> 2 <!-- 基础样式 --> 3 <Style x:Key="BaseStyle" TargetType="Button"> 4 <Setter Property="FontSize" Value="18"/> 5 <Setter Property="Margin" Value="5"/> 6 </Style> 7 8 <!-- 红色按钮(继承基础样式) --> 9 <Style x:Key="RedButton" TargetType="Button" BasedOn="{StaticResource BaseStyle}"> 10 <Setter Property="Background" Value="Red"/> 11 </Style> 12 13 <!-- 蓝色按钮(继承基础样式) --> 14 <Style x:Key="BlueButton" TargetType="Button" BasedOn="{StaticResource BaseStyle}"> 15 <Setter Property="Background" Value="Blue"/> 16 </Style> 17 </Window.Resources>
使用:
1 <Button Style="{StaticResource RedButton}" Content="红色"/> 2 <Button Style="{StaticResource BlueButton}" Content="蓝色"/>
六、触发器(Triggers)—— 交互效果核心
Style 最强功能:交互样式(鼠标悬浮、点击、选中、禁用)
示例:鼠标悬浮变色按钮
1 <Style x:Key="HoverButton" TargetType="Button"> 2 <Setter Property="FontSize" Value="18"/> 3 <Setter Property="Background" Value="LightBlue"/> 4 5 <!-- 触发器:鼠标悬浮 --> 6 <Style.Triggers> 7 <Trigger Property="IsMouseOver" Value="True"> 8 <Setter Property="Background" Value="DarkBlue"/> 9 <Setter Property="Foreground" Value="White"/> 10 </Trigger> 11 </Style.Triggers> 12 </Style>
效果:
- 正常 → 浅蓝
- 鼠标放上去 → 深蓝底白字
更多触发器
1 <!-- 按钮禁用时 --> 2 <Trigger Property="IsEnabled" Value="False"> 3 <Setter Property="Background" Value="Gray"/> 4 </Trigger> 5 6 <!-- 获得焦点时 --> 7 <Trigger Property="IsFocused" Value="True"> 8 <Setter Property="BorderBrush" Value="Red"/> 9 </Trigger>
七、给 TextBlock 用 Style
1 <Window.Resources> 2 <Style x:Key="TitleText" TargetType="TextBlock"> 3 <Setter Property="FontSize" Value="24"/> 4 <Setter Property="FontWeight" Value="Bold"/> 5 <Setter Property="Foreground" Value="DarkRed"/> 6 <Setter Property="Margin" Value="10"/> 7 </Style> 8 </Window.Resources> 9 10 <TextBlock Style="{StaticResource TitleText}" Text="标题"/>
八、Style 中设置布局属性
1 <Style TargetType="TextBox"> 2 <Setter Property="Width" Value="200"/> 3 <Setter Property="Height" Value="35"/> 4 <Setter Property="Margin" Value="5"/> 5 <Setter Property="Padding" Value="5"/> 6 </Style>
九、MultiTrigger 多条件触发
满足多个条件才生效:
1 <MultiTrigger> 2 <MultiTrigger.Conditions> 3 <Condition Property="IsMouseOver" Value="True"/> 4 <Condition Property="IsEnabled" Value="True"/> 5 </MultiTrigger.Conditions> 6 <Setter Property="Background" Value="Green"/> 7 </MultiTrigger>
十、Style 重点总结(必须背会)
- Style = 控件外观集合
- TargetType → 必须写,指定控件类型
- x:Key → 用来引用样式
- Setter → 设置属性
- Trigger → 交互效果(悬浮、选中、禁用)
- BasedOn → 样式继承
- 无 x:Key → 自动应用到所有该类型控件
十一、最实用完整示例(可直接复制)
1 <Window.Resources> 2 <Style TargetType="Button" x:Key="PerfectButton"> 3 <Setter Property="FontSize" Value="18"/> 4 <Setter Property="Foreground" Value="White"/> 5 <Setter Property="Background" Value="#0077D4"/> 6 <Setter Property="Padding" Value="12,6"/> 7 <Setter Property="Margin" Value="5"/> 8 <Setter Property="BorderThickness" Value="0"/> 9 10 <Style.Triggers> 11 <Trigger Property="IsMouseOver" Value="True"> 12 <Setter Property="Background" Value="#005AA1"/> 13 </Trigger> 14 <Trigger Property="IsPressed" Value="True"> 15 <Setter Property="Background" Value="#004488"/> 16 </Trigger> 17 <Trigger Property="IsEnabled" Value="False"> 18 <Setter Property="Background" Value="#AAAAAA"/> 19 </Trigger> 20 </Style.Triggers> 21 </Style> 22 </Window.Resources> 23 24 <Button Style="{StaticResource PerfectButton}" Content="标准按钮"/>
最终一句话总结
Style = WPF 的样式系统,用 Setter 设置外观,用 Trigger 做交互,一处定义,全局复用!
浙公网安备 33010602011771号