Setter 类
一、Setter 是什么?
Setter = 样式里的 “属性赋值器”
作用:给控件的属性设置值。
作用:给控件的属性设置值。
在 WPF 样式中,所有属性设置都必须用 Setter。
一句话:
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 }
必须写两个:
- Property → 要改哪个属性
- 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 总结(超级重要)
- Setter = 样式中给属性赋值
- 必须写:Property + Value
- 用在 Style、Trigger、ControlTemplate 中
- 支持简单值、复杂值、资源引用
- 触发器中的 Setter 实现交互效果
- 是 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 就没有样式!
浙公网安备 33010602011771号