WPF 样式(Style)(2)
我的WPF很弱,很多时候写的是一塌糊涂的,在这里感谢nonocast,Tommy和Joans给予的帮助。谢谢你们在工作中给予的指导和帮助,让我少走很多弯路。
已经很久不用WPF编程了,正好最近的项目要用到它,所以要把遗忘的WPF重新学习一下了。翻出之前写的blog,WPF样式(style),写的很简单,就把之前写的那篇叫WPF样式(style)(1)啦,现在这篇为WPF样式(style)(2)吧。
Style是属性设置的集合。可以给同一种类的不同实例设置相同的Style。前提是这个类必须是派生自 FrameworkElement 或 FrameworkContentElement 。
Style通常在 Resources 节内部声明为资源。
1. Style的有效范围
1.1 如果在Application.Resources中声明Style,则它的有效范围是整个程序

<Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Themes/Style.xaml" /> <ResourceDictionary Source="Themes/Generic.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources>
1.2 如果在Window.Resources中声明Style,则它的有效范围是当前窗体

<Window.Resources> <Style TargetType="Button"> <Setter Property="Width" Value="75"></Setter> <Setter Property="Height" Value="85"></Setter> <EventSetter Event="Click" Handler="Button_Click"></EventSetter> </Style> </Window.Resources>
1.3 如果在其他控件(例如Grid)的Resources中声明Style,则它的有效范围就是这个控件

<Grid.Resources> <Style TargetType="Button"> <Setter Property="Width" Value="75"></Setter> <Setter Property="Height" Value="85"></Setter> <EventSetter Event="Click" Handler="Button_Click"></EventSetter> </Style> </Grid.Resources>
注:
Style中如果只写了TargetType="Button",没有写x:Key,则Style有效范围内的Button的Style默认都是这个Style。
Style中如果写x:Key=“buttonStyle1”了,则引用此Style的方法为Style="{StaticResource buttonStyle1}"
2. Style可以用BaseOn来“继承”另一个Style

<Window.Resources> <Style TargetType="Button" x:Key="buttonstyle1"> <Setter Property="Height" Value="60"></Setter> <Setter Property="Width" Value="60"></Setter> </Style> <Style TargetType="Button" BasedOn="{StaticResource ResourceKey=buttonstyle1}"/> </Window.Resources>
3. TargetType
如果没有给Style指定TargetType,则在写Style时,必须给每个属性添加类型,这样不同的类型可以共用同一个Style:

<Style x:Key="Style1"> <Setter Property="Button.Width" Value="80"></Setter> <Setter Property="Button.Height" Value="80"></Setter> <Setter Property="TextBlock.Text" Value="HelloWorld"></Setter> </Style>
注:将Style1同时指定给Button和TextBlock,Button会自动忽略不适用它们的属性Text。而二者公有的属性Height,Width,对二者都有效。
4. C# 代码中引用Style
tblock.Style = (Style)FindResource("Style1");
5. 可以在Style中绑定事件,例如:
<Style TargetType="Button">
<EventSetter Event="Click" Handler="Button_Click"></EventSetter>
</Style>
6. Triggers 放到下一篇再讲
作者:绿茶叶
出处:http://www.cnblogs.com/greenteaone/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2010-12-09 为RichTextBox中的文本添加书签