Setter 类

一、Setter 是什么?

Setter = 样式里的 “属性赋值器”
作用:给控件的属性设置值。
在 WPF 样式中,所有属性设置都必须用 Setter。
一句话:
Setter = 给属性赋值

二、Setter 类的 3 个核心属性

 1 public class Setter : SetterBase
 2 {
 3     // 要设置的【属性名】(必填)
 4     public DependencyProperty Property { get; set; }
 5 
 6     // 要设置的【值】(必填)
 7     public object Value { get; set; }
 8 
 9     // 目标对象(用于模板内部,很少用)
10     public string TargetName { get; set; }
11 }

必须写两个:

  1. Property → 要改哪个属性
  2. Value → 改成什么值

三、最基础语法(固定格式)

1 <Setter Property="要设置的属性" Value="要赋的值" />

最简单例子

1 <Setter Property="FontSize" Value="20" />
2 <Setter Property="Background" Value="Red" />
3 <Setter Property="Width" Value="150" />

四、Setter 最常用场景:Style 中

示例 1:给 Button 设置样式

 1 <Window.Resources>
 2     <Style x:Key="MyButton" TargetType="Button">
 3         <!-- 多个 Setter 批量设置属性 -->
 4         <Setter Property="FontSize" Value="18"/>
 5         <Setter Property="Foreground" Value="White"/>
 6         <Setter Property="Background" Value="CornflowerBlue"/>
 7         <Setter Property="Padding" Value="10,5"/>
 8         <Setter Property="Margin" Value="5"/>
 9     </Style>
10 </Window.Resources>
11 
12 <!-- 使用 -->
13 <Button Style="{StaticResource MyButton}" Content="测试按钮"/>

解释

  • 一个 Style 包含 N 个 Setter
  • 每个 Setter 负责一个属性
  • 统一管理,复用性极强

五、Setter 赋值复杂类型(不是简单字符串)

很多属性不是普通数字 / 文字,必须用完整标签写法。

示例 2:给 Margin、CornerRadius 等赋值

 1 <Style TargetType="Button">
 2     <!-- 简单写法 -->
 3     <Setter Property="Width" Value="120"/>
 4 
 5     <!-- 复杂属性:完整标签写法 -->
 6     <Setter Property="Margin">
 7         <Setter.Value>
 8             <Thickness>5</Thickness>
 9         </Setter.Value>
10     </Setter>
11 
12     <Setter Property="CornerRadius">
13         <Setter.Value>
14             <CornerRadius>8</CornerRadius>
15         </Setter.Value>
16     </Setter>
17 </Style>

六、Setter 引用资源(颜色、样式)

Setter 可以用 StaticResource 赋值。

示例 3:引用资源画刷

1 <Window.Resources>
2     <SolidColorBrush x:Key="ThemeColor" Color="#2D7DD2"/>
3 
4     <Style TargetType="Button">
5         <!-- Setter 引用资源 -->
6         <Setter Property="Background" Value="{StaticResource ThemeColor}"/>
7     </Style>
8 </Window.Resources>

七、Setter 在触发器中使用(交互效果)

触发器里的 Setter 是交互核心!
鼠标悬浮、选中、获得焦点时改变属性。

示例 4:鼠标悬浮变色

 1 <Style TargetType="Button">
 2     <Setter Property="FontSize" Value="18"/>
 3     <Setter Property="Background" Value="LightBlue"/>
 4 
 5     <Style.Triggers>
 6         <!-- 鼠标悬浮时,用 Setter 修改颜色 -->
 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>

重点

触发器里的 Setter 语法完全一样!
只是触发时机不同。

八、Setter 在控件模板(ControlTemplate)中使用

模板内部可以给子元素设置属性,用 TargetName

示例 5:模板内 Setter

 1 <ControlTemplate x:Key="ButtonTemplate" TargetType="Button">
 2     <Border x:Name="border" Background="LightGray"/>
 3 
 4     <ControlTemplate.Triggers>
 5         <Trigger Property="IsMouseOver" Value="True">
 6             <!-- 给模板里的 border 赋值 -->
 7             <Setter TargetName="border" Property="Background" Value="Blue"/>
 8         </Trigger>
 9     </ControlTemplate.Triggers>
10 </ControlTemplate>

九、Setter 常见错误(一定要避开)

错误 1:没有写 Property 或 Value

1 <!-- 错误 -->
2 <Setter Value="18"/>

错误 2:属性名写错

1 <!-- 错误:Fontsize → 应该是 FontSize -->
2 <Setter Property="Fontsize" Value="18"/>

错误 3:值类型不匹配

1 <!-- 错误:Width 是数字,不能给文字 -->
2 <Setter Property="Width" Value="ABC"/>

错误 4:没有 TargetType

1 <!-- 错误:必须写 TargetType -->
2 <Style x:Key="Btn">

十、Setter 总结(超级重要)

  1. Setter = 样式中给属性赋值
  2. 必须写:Property + Value
  3. 用在 Style、Trigger、ControlTemplate 中
  4. 支持简单值、复杂值、资源引用
  5. 触发器中的 Setter 实现交互效果
  6. 是 WPF 样式系统最基础、最核心的类

十一、完整可运行示例(直接复制)

 1 <Window x:Class="WpfApp.MainWindow"
 2         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4         Title="Setter 演示" Height="300" Width="400">
 5 
 6     <Window.Resources>
 7         <Style TargetType="Button" x:Key="TestStyle">
 8             <!-- 基础 Setter -->
 9             <Setter Property="FontSize" Value="20"/>
10             <Setter Property="Foreground" Value="White"/>
11             <Setter Property="Background" Value="#0077D4"/>
12             <Setter Property="Padding" Value="10,6"/>
13             <Setter Property="Margin" Value="10"/>
14             <Setter Property="BorderThickness" Value="0"/>
15             <Setter Property="CornerRadius" Value="8"/>
16 
17             <!-- 触发器 Setter -->
18             <Style.Triggers>
19                 <Trigger Property="IsMouseOver" Value="True">
20                     <Setter Property="Background" Value="#005AA1"/>
21                 </Trigger>
22                 <Trigger Property="IsPressed" Value="True">
23                     <Setter Property="Background" Value="#004488"/>
24                 </Trigger>
25             </Style.Triggers>
26         </Style>
27     </Window.Resources>
28 
29     <Grid>
30         <Button Style="{StaticResource TestStyle}" Content="我是完美按钮"/>
31     </Grid>
32 </Window>

一句话终极总结

Setter 就是 WPF 样式里专门用来给控件属性 “赋值” 的工具,没有 Setter 就没有样式!
posted on 2026-03-25 17:27  工业搬砖猿Lee  阅读(25)  评论(0)    收藏  举报