样式(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 样式和行为的更多相关文章

  1. Bootstrap WPF Style,Bootstrap风格的WPF样式

    简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...

  2. 写自己的WPF样式 - 窗体

    初试WPF样式,感觉还不错.上篇写完了按钮的样式下面写窗体,废话不多说直接上代码: (1)定义一个窗体样式"MyWpfWindow" <Style x:Key="M ...

  3. C#工具:Bootstrap WPF Style,Bootstrap风格的WPF样式

    简介 GitHub地址:https://github.com/ptddqr/bootstrap-wpf-style 此样式基于bootstrap-3.3.0,样式文件里的源码行数都是指的这个版本.CS ...

  4. WPF样式(Style)入门

    原文:WPF样式(Style)入门 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34802416/article/details/78231 ...

  5. WPF样式——经典博客

    WPF样式博客:http://www.cnblogs.com/luluping/archive/2011/05/06/2039498.html

  6. WPF样式学习三

    SnapsToDevicePixels 获取或设置在呈现过程,该值来确定呈现此元素是否应使用特定于设备的像素设置. 这是一个依赖项属性. true ,如果元素应以符合呈现到设备像素;否则, false ...

  7. WPF样式与触发器(3)

    WPF中的各类控件元素, 都可以自由的设置其样式. 诸如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Background) 字体颜色(Foreground) 边距(Mar ...

  8. 【转】【WPF】WPF样式(Style)—触发器

    样式(Styles)由三部分构成:设置器(Setter).触发器(Triggers).资源(Resources). (1)触发器,让样式的使用更加准确.灵活和高效. (2)触发器(Triggers)主 ...

  9. WPF样式资源文件简单运用

    WPF通过资源来保存一些可以被重复利用的样式,下面的示例展示了简单的资源样式文件的使用: 一.xaml中定义资源及简单的引用 <Window.Resources > <!--wpf窗 ...

随机推荐

  1. Quartz.Net在windows服务中的使用

    写在前面 这几天在弄一个项目,需要定时抓取一些数据,当时也想直接用timer算了.因为之前也弄过这样的项目,但是一想,已经用过了,再去使用同一种思路,未免太乏味了.就换了一种新玩法.这里将之前看到的一 ...

  2. DOM系列---DOM操作样式

    发文不易,若转载传播,请亲注明出处,谢谢! 一.操作样式 CSS作为(X)HTML的辅助,可以增强页面的显示效果.但不是每个浏览器都能支持最新的CSS能力.CSS的能力和DOM级别密切相关,所以我们有 ...

  3. AngularJS - 路由入门

    我们有很多方法让一个视图随着用户的操作进行变化. 但是,只是单单一个视图就要满足所有的需求会让代码变得非常复杂. 也许我们可以使用ng-include来引用各种模板,但这只限于部分场景. 于是我们可以 ...

  4. 关于Jquery 操作Cookie 取值错误

    使用JQuery操作cookie时 发生取的值不正确的问题: 结果发现cookie有四个不同的属性: 名称,内容,域,路径 $.cookie('the_cookie'); // 读取 cookie $ ...

  5. java.lang.NoClassDefFoundError: javax/transaction/UserTransaction

    在运行定时任务的时候报错: Java.lang.NoClassDefFoundError: javax/transaction/UserTransaction 原因:缺少jta的jar包 解决方法:下 ...

  6. python 学习笔记1(序列;if/for/while;函数;类)

    本系列为一个博客的学习笔记,一部分为我原创. 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 1. print 可以打印 有时需要 ...

  7. BZOJ-1143&&BZOJ-2718 祭祀river&&毕业旅行 最长反链(Floyed传递闭包+二分图匹配)

    蛋蛋安利的双倍经验题 1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1901 Solved: 951 ...

  8. BZOJ2460 [BeiJing2011]元素

    Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力越 ...

  9. ECSHOP \admin\edit_languages.php GETSHELL Based On Injection PHP Code Into /languages/zh_cn/user.php

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对于很多CMS网站来说,它们都需要保存很多的网站META信息,最常用的最佳实践是以 ...

  10. Codeforces 650C Table Compression

    传送门 time limit per test 4 seconds memory limit per test 256 megabytes input standard input output st ...