WPF 样式和行为
样式(style):组织和重用格式化选项的重要工具,将细节如边距、字体、字号等信息封装起来,然后再需要的地方通过属性来应用样式。
行为(behavior):封装一些通用的UI行为,如拖动,缩放元素的代码,需要的时候,通过一两行简单的XMAL,附加到元素上去。节省编写的时间。
1.样式基础
样式是可用于元素的属性值集合,当我们标准化一个窗口中字体的时候,最简单的方法是设置包含窗口的字体属性。Control类中包含了Fontfamily,FontSize,FontWeight(粗体),FontStyle(斜体)。这些值具有继承特性,在窗口级别设置这些属性的时候,窗口中所有元素都会使用相同的属性值。
样式为我们解决了这个问题,可以定义独立的用于封装的属性样式:
<Window.Resources>
<Style x:Key="MyStyle">
<Setter Property="Control.FontFamily" Value="Times New Roman"></Setter>
<Setter Property="Control.FontSize" Value="28"></Setter>
<Setter Property="Control.FontWeight" Value="Bold"></Setter>
</Style>
</Window.Resources>
上面的代码创立了一个独立资源,一个System.Windows.Style对象。这个样式包含了一个设置器集合,3个Setter对象。样式的键名为MyStyle(一般都为Style结尾)。
通过应用样式,达到现实效果:
<Button x:Name="button1" Margin="10" Height="40" Style="{StaticResource MyStyle}">button1</Button>
也可以通过代码设置样式,需要用到FindResource()方法,在资源集中提取样式。
button1.Style = (Style)button1.FindResource("MyStyle");//设置button1的样式为MyStyle
样式系统增加了很多优点。设置多组明显相关的属性设置,简明了标记。
Setters集合是Style类中重要的属性,Style类中有5个重要属性,下表:
| 属性 | 说明 |
| Setters | 设置属性值 |
| Triggers | 继承自TriggerBase类并能自动改变样式 |
| Resource | 样式的资源集合 |
| BasedOn | 创建继承与其他样式的更具体的样式 |
| TargerType | 标识应用样式的元素类型 |
多层样式(样式继承)
尽管可以定义任意数量的样式,但是WPF元素每次只能使用一个样式对象。但是由于属性值继承和样式继承特性,非常有用。
例如,希望一组控件使用相同的字体,但应用不同的样式,这时我们就能设置容器的样式。只要设置的属性具有属性值继承特性,这些值都会被传递到子元素。
另外一些情况,可能希望在另一个样式的基础上创建样式,可以通过设置BasedOn特性来使用此类样式的继承。(BasedOn中如果2次设置了同一属性,新的会覆盖之前的定义)
<Window.Resources>
<Style x:Key="MyStyle">
<Setter Property="Control.FontFamily" Value="Times New Roman"></Setter>
<Setter Property="Control.FontSize" Value="28"></Setter>
<Setter Property="Control.FontWeight" Value="Bold"></Setter>
</Style> <Style x:Key="NewMyStyle" BasedOn="{StaticResource MyStyle}"><!--新样式继承自MyStyle-->
<Setter Property="Control.Foreground" Value="White"></Setter>
<Setter Property="Control.Background" Value="DarkBlue"></Setter>
</Style>
</Window.Resources> <StackPanel>
<Button x:Name="button1" Margin="10" Height="40" Style="{StaticResource MyStyle}">button1</Button><!--设置样式-->
<Button Margin="10" Height="40">button2</Button>
<Button Margin="10" Height="40" Style="{StaticResource NewMyStyle}">button3</Button><!--设置样式-->
</StackPanel>

行为:
可以使用Expression Blend的设计特性来实现,将行为拖动到所需要的控件上。使用行为可以更好的开发整洁的用户界面功能包,使用户界面具有更好的维护性。
WPF 样式和行为的更多相关文章
- Bootstrap WPF Style,Bootstrap风格的WPF样式
简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...
- 写自己的WPF样式 - 窗体
初试WPF样式,感觉还不错.上篇写完了按钮的样式下面写窗体,废话不多说直接上代码: (1)定义一个窗体样式"MyWpfWindow" <Style x:Key="M ...
- C#工具:Bootstrap WPF Style,Bootstrap风格的WPF样式
简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...
- WPF样式(Style)入门
原文:WPF样式(Style)入门 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34802416/article/details/78231 ...
- WPF样式——经典博客
WPF样式博客:http://www.cnblogs.com/luluping/archive/2011/05/06/2039498.html
- WPF样式学习三
SnapsToDevicePixels 获取或设置在呈现过程,该值来确定呈现此元素是否应使用特定于设备的像素设置. 这是一个依赖项属性. true ,如果元素应以符合呈现到设备像素;否则, false ...
- WPF样式与触发器(3)
WPF中的各类控件元素, 都可以自由的设置其样式. 诸如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Background) 字体颜色(Foreground) 边距(Mar ...
- 【转】【WPF】WPF样式(Style)—触发器
样式(Styles)由三部分构成:设置器(Setter).触发器(Triggers).资源(Resources). (1)触发器,让样式的使用更加准确.灵活和高效. (2)触发器(Triggers)主 ...
- WPF样式资源文件简单运用
WPF通过资源来保存一些可以被重复利用的样式,下面的示例展示了简单的资源样式文件的使用: 一.xaml中定义资源及简单的引用 <Window.Resources > <!--wpf窗 ...
随机推荐
- 重构笔记---MEF框架(下)
概述 上一篇介绍了MEF的一个很简单很基本的应用,实现了MEF框架并展示了MEF框架的一些基本的要求和设置,这些基础知识很重要,接下来我们分析一下如何扩展或增强MEF框架内容. 增强的Contract ...
- javascript与服务器1
A. 通过在客户端设置Cookie,然后在服务器端读取它. 关于Cookie只说明一点, 它是存储在客户端机器上的一小块信息, 可以有客户端程序或服务器程序创建,并通过http传递.常用于跟踪用户在客 ...
- OC基础--OC中类的定义
OC中类的定义与使用跟C#和java差别相当明显,做个笔记,牢记并加以区别! 一.OC中类的定义:关键字@implementation 和 @end 注意事项: 1.定义好一个类之后,要让这个类继承N ...
- hdu1542矩阵的并 线段树+扫描线
求矩阵的并,也就是要求所有的面积.那可以吧总的图形按照矩阵来切割.使其为一块一块. 输入的时候用坐标表示,这里扫描线从下到上扫描.初始时让下面的边为1,上面的为-1: 用一条先从下面开始想上扫描.遇到 ...
- array,vertor,arraylist,hashable,hashmap等几个易混淆概念的区别
Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再改变, Vertor是放的Object. Vertor一维,Hashmap/Hashtabe二维: Vertor/Ar ...
- BZOJ-1705 Longge的问题 一维GCD SUM 乱搞+质因数分解+...
2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 1871 Solved: 1172 [Submit][ ...
- Spring+C3P0数据库连接池配置
一.xml文件读取.properties文件连接数据库 1.xml文件中的配置 <bean id="dataSourceLocal" name="dataSourc ...
- spring 第一篇(1-1):让java开发变得更简单(下)转
spring 第一篇(1-1):让java开发变得更简单(下) 这个波主虽然只发了几篇,但是写的很好 上面一篇文章写的很好,其中提及到了Spring的jdbcTemplate,templet方式我之前 ...
- 为什么mvc里面的ModelState.IsValid一只都是true
http://zhidao.baidu.com/link?url=H69JQBpF8vbJEOUUc1RCjRZZ05gSGn6PiPL740aGgR3qIfFTT__pt4KgEg7O47lReYR ...
- Extjs Window用法详解
今天我们来介绍一下Extjs中一个常用的控件Window.Window的作用是在页面中创建一个窗口,这个窗口作为容器,可以在它里面加入grid.form等控件,从而来实现更加复杂的界面逻辑. 本文的示 ...