Style类

一、Style 是什么?

Style = WPF 控件的 “CSS 样式表”
作用:统一设置控件的属性、外观、行为,实现:
  • 界面统一
  • 代码复用
  • 便于维护
  • 解耦界面与样式
一句话:
一个 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 个:

  1. TargetType → 目标控件类型
  2. x:Key → 样式名字
  3. Setters → 设置属性
  4. 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 重点总结(必须背会)

  1. Style = 控件外观集合
  2. TargetType → 必须写,指定控件类型
  3. x:Key → 用来引用样式
  4. Setter → 设置属性
  5. Trigger → 交互效果(悬浮、选中、禁用)
  6. BasedOn → 样式继承
  7. 无 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 做交互,一处定义,全局复用!
posted on 2026-03-25 16:12  工业搬砖猿Lee  阅读(33)  评论(0)    收藏  举报