WPF样式学习笔记
以前写界面时,经常给每个按钮单独设置颜色、大小、字体,不仅代码重复,而且后期修改很麻烦。WPF 提供的样式机制很好地解决了这个问题。样式的核心思想就是:统一设置、重复使用、方便维护。
一、什么是样式(Style)
WPF 中的样式,本质上就是把一组属性值打包起来,然后应用到多个控件上。
例如:
按钮宽度统一 100
高度统一 50
字体统一 20
背景色统一绿色
如果没有样式,每个按钮都要写一遍属性。
如果使用样式,只写一次,多个按钮共享。
二、为什么要学样式
如果项目里有很多按钮:
<Button Width="100" Height="50" Background="Green"/> <Button Width="100" Height="50" Background="Green"/> <Button Width="100" Height="50" Background="Green"/>这种写法会出现几个问题:
1. 重复代码太多
多个控件属性一样,却写很多遍。
2. 后期修改麻烦
比如按钮宽度改成120,需要一个个修改。
3. 风格不统一
团队开发时,每个人写法不同,界面容易混乱。
所以使用样式后:
<Style TargetType="Button">所有 Button 自动统一风格。
三、Style 的核心组成
样式类叫: Style
最重要几个成员:
| 属性 | 作用 |
|---|---|
| TargetType | 作用于哪个控件 |
| Setters | 设置属性值 |
| Triggers | 触发器 |
| BasedOn | 继承其他样式 |
| Resources | 资源 |
四、最基础样式写法(统一按钮风格)
<Window.Resources> <Style TargetType="Button"> <Setter Property="Width" Value="100"/> <Setter Property="Height" Value="50"/> <Setter Property="FontSize" Value="20"/> <Setter Property="Background" Value="Green"/> </Style> </Window.Resources>然后按钮直接写:
<Button Content="登录"/> <Button Content="退出"/>所有按钮自动应用样式。
五、x:Key 命名样式(按需使用)
如果不希望所有按钮都一样,就给样式起名字:
<Style x:Key="LoginStyle" TargetType="Button">使用时:
<Button Style="{StaticResource LoginStyle}"/>这样只有引用它的按钮才生效。
六、StaticResource 和 DynamicResource 区别
1. StaticResource(静态资源)
程序启动时就确定资源。
效率高,最常用。
Style="{StaticResource LoginStyle}"2. DynamicResource(动态资源)
运行时再查找资源。
适合主题切换、动态换肤。
Background="{DynamicResource MainColor}"我的理解:
静态资源 = 提前准备好
动态资源 = 用的时候再找
七、样式继承(BasedOn)
如果很多按钮只有颜色不同,其余属性一样,就可以继承。
<Style x:Key="BaseButtonStyle" TargetType="Button"> <Setter Property="Width" Value="100"/> <Setter Property="Height" Value="50"/> </Style> <Style x:Key="RedButtonStyle" TargetType="Button" BasedOn="{StaticResource BaseButtonStyle}"> <Setter Property="Background" Value="Red"/> </Style>这就像 C# 类继承,减少重复代码,非常重要。
八、样式可以写在哪些位置
1. 写在控件内部
只对当前控件有效,适合临时使用。
2. 写在 Window.Resources
当前窗口所有控件可用,适合单页面项目。
3. 写在 App.xaml
全项目通用,适合正式项目。
4. 写在资源字典文件
九、资源字典 ResourceDictionary
WPF 所有资源都能放进字典里,例如:
Style
Brush(画笔)
Template(模板)
字体
颜色
加载方式:
<ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/ButtonDictionary.xaml"/> </ResourceDictionary.MergedDictionaries>我的理解:资源字典 = 专门存放公共资源的仓库。
十、触发器 Trigger
触发器作用:
当满足某个条件时,自动改变控件样式。
比如:
鼠标移入按钮变色
点击按钮缩小
文本框为空时边框变红
最常用 Trigger
<Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Background" Value="Orange"/> </Trigger> </Style.Triggers>我的理解:
Trigger 就像自动响应器:
如果发生某条件
那么执行某效果
十一、常见触发器类型(了解)
| 类型 | 作用 |
|---|---|
| Trigger | 属性变化触发 |
| MultiTrigger | 多条件触发 |
| DataTrigger | 数据触发 |
| MultiDataTrigger | 多数据触发 |
| EventTrigger | 事件触发 |
十二、Setter 本质理解
Setter 是样式里的单条设置:
<Setter Property="Width" Value="100"/>意思是:把 Width 设置为 100
多个 Setter 组合起来形成完整样式。
十三、总结
WPF 样式是 UI 开发最核心内容之一。
它优势非常明显:
1. 代码更少
2. 修改方便
3. 页面统一美观
4. 企业项目规范
