当前位置: 首页 > news >正文

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. 企业项目规范

http://www.jsqmd.com/news/706080/

相关文章:

  • 动态时间规整(DTW):跨越时间维度的相似性度量
  • 统计学习与因果学习在机器学习中的核心差异与应用
  • 基于DistilBERT的问答系统微调与部署实践
  • 仿真一:与门运算
  • Diffusers库实现AI图像修复与扩展的实战指南
  • 8088单板机微机原理课程设计--时钟1(时钟的显示)
  • 2026年化学工程论文降AI工具推荐:化工反应和工艺优化研究降AI方案
  • 3个关键优势:为什么MPC-HC仍是Windows上最纯净的媒体播放器解决方案
  • 唐山正规的纤维水泥板制造厂名声
  • 在线抠图换背景免费工具怎么选?网页端哪个准、微信小程序有哪些方案(2026 年)
  • 【限时开放】Docker AI Toolkit 2026企业版Beta通道关闭倒计时:3天内未注册将永久失去GPU调度优先权与联邦学习插件
  • 贝叶斯网络原理与应用实战指南
  • 从本地开发到全球边缘节点一键分发,Docker WASM部署全流程拆解,含CI/CD自动化模板
  • Android?Activity!!!
  • 如何永久保存微信聊天记录:开源工具WeChatExporter的创新解决方案
  • TensorFlow.data API高效数据管道构建与优化实战
  • gInk:5分钟掌握Windows免费屏幕标注工具,让演示更高效
  • SMU 周报
  • 2026年智能体AI生产级扩展的五大挑战与解决方案
  • Bulk Crap Uninstaller:彻底清理Windows垃圾软件的批量卸载神器
  • 深度解析RE-UE4SS:构建Unreal Engine游戏脚本化系统的架构设计与实战指南
  • LangGraph状态管理内幕:如何在复杂工作流中保持状态一致性
  • MCP 2026合规审计配置落地实录:5步完成FINRA/SEC双标对齐,附可审计配置模板(2024Q4最新版)
  • 科研绘图避坑指南:Python、Matlab、Origin画平行坐标图,到底哪个又快又好?
  • C语言命令行参数的使用
  • 10华夏之光永存:盘古大模型开源登顶世界顶级——全系列终章总结与未来使命(第十篇)
  • 补题记录4
  • 5个理由选择Notepad--:跨平台高效文本编辑的完整指南
  • ThinkPad风扇终极控制指南:TPFanCtrl2让你的笔记本更安静更高效
  • 网络故障定位工具怎么搭配:Wireshark、tcpdump、监控平台各自该在什么时候上场?