2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师。最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,000 Things You Should Know About WPF 。他以类似微博式的150字简短语言来每天更新一条WPF和C#重要又容易被遗忘的知识。很希望能够分享给大家。
本系列我不仅会翻译他的每一个tip,也会加入自己开发之中的看法和见解。本系列我希望自己也能和他一样坚持下来,每天的进步才能促成伟大。
在这里郑重说明.该系列是基于Sean Sexton先生的英文博客, Sean Sexton拥有全部版权和撤销权利。
前文可以翻阅本博客wpf标签的文章。
[小九的学堂,致力于以平凡的语言描述不平凡的技术。如要转载,请注明来源:小九的学堂。cnblogs.com/xfuture]
#63 Trigger触发后的属性改变可以自动重置
当Trigger改变了一个属性的值后,如果Trigger中的判断不再为true的时候,该属性会自动重置为初始值。
例子:对一个button mouse over的时候你设置其有dropshadoweffect,而当你离开该button的时候就会回复其原始状态。
<Window.Resources>
<Style x:Key="hoverStyle" TargetType="Button">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Button.Effect">
<Setter.Value>
<DropShadowEffect/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="Run" Height="23" Width="75" Style="{StaticResource hoverStyle}"/>
<Button Content="Skip" Height="23" Width="75" Style="{StaticResource hoverStyle}"/>
<Button Content="Jump" Height="23" Width="75" Style="{StaticResource hoverStyle}"/>
</StackPanel>
#64 Wpf所支持的三种Triggers
Wpf支持三种不同种类的Triggers:
<1>. Property trigger,
1. 当依赖属性改变时触发,
2. 使用属性名字来定制,
3. 包含Setter元素,来赋予一个或者多个依赖属性触发器,当Trigger处于active状态或者处于inactive状态时,可以触发一个或者多个TriggerAction.
<2>. Data trigger,
1. 当CLR属性改变时触发,
2. 使用Binding 关键字来定制,
3. 包含Setter元素,来赋予一个或者多个依赖属性触发器,当Trigger处于active状态或者处于inactive状态时,可以触发一个或者多个TriggerAction.
<3>. Event trigger,
1. 当一个Routed event触发时触发,
2. 可以触发派生自TriggerAction的类,比如BeginStoryboard, SoundPlayerAction.
3. 多用在WPF 动画上
#65 依赖属性继承逻辑树上层元素赋予的值
依赖属性的值可以来自很多不同的数据源,但是一般来说都会从逻辑树上层元素继承值。
这意味着当你在Xaml中高层元素赋予一个依赖属性值,其子元素相同名字的依赖属性会继承其值。
下面是一个在window元素中定义fontstyle而子元素继承到的例子:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:m="clr-namespace:PersonLib;assembly=PersonLib"
Title="MainWindow" Height="350" Width="525" FontStyle="Italic">
<StackPanel Orientation="Vertical">
<Button Content="Run" Height="23" Width="75" />
<Button Content="Skip" Height="23" Width="75" />
<StackPanel Orientation="Horizontal">
<Label Content="Inside 2nd StackPanel"/>
<Label Content="I do my own FontStyle" FontStyle="Normal"/>
</StackPanel>
</StackPanel>
</Window>
子元素中的Label会继承window定义的Italic的字体。
#66 依赖属性冒泡寻找其继承值
一个UI元素会向上寻找其需要继承的值,除非寻找到独特定义的属性则会一直向上冒泡寻找到根元素。
下面有个button中寻找fontstyle属性值的例子,穿过了stackpanel和grid一直到window找到其定义值。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:m="clr-namespace:PersonLib;assembly=PersonLib"
Title="MainWindow" Height="350" Width="525" FontStyle="Italic">
<Grid>
<StackPanel Orientation="Vertical">
<Button Content="Run" Height="23" Width="75" />
<Button Content="Skip" Height="23" Width="75" />
</StackPanel>
</Grid>
</Window>
#67 UI元素控件的类继承图
#68 WPF UI元素的四个基础类
存在四个基础类,大多数UI元素继承自它们,或者你自己定制一些类的时候也是继承自它们。
1. ContentElement, 2. FrameworkContentElement, 3. UIElement, 4. FrameworkElement.
下一期会有更多关于WPF内置结构的Tips,希望能多多关注~
2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>的更多相关文章
- 2000条你应知的WPF小姿势 基础篇<15-21>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师,对C#和WPF有着极深的热情.最为出色的是他维护了两个博客:2,000Things You Should Know ...
- 2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- 2000条你应知的WPF小姿势 基础篇<74-77 WPF 多窗口Tips>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- 2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- 2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- 2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>
前一阵子由于个人生活原因,具体见上一篇,耽搁了一阵子,在这里也十分感谢大家支持和鼓励.现在开始继续做WPF2000系列. 在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件 ...
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- 2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- 2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
随机推荐
- 动画requestAnimationFrame
前言 在研究canvas的2D pixi.js库的时候,其动画的刷新都用requestAnimationFrame替代了setTimeout 或 setInterval 但是jQuery中还是采用了s ...
- C# 中参数验证方式的演变
一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...
- Java基础Map接口+Collections
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Android 获取系统相册中的所有图片
Android 提供了API可获取到系统相册中的一些信息,主要还是通过ContentProvider 来获取想要的内容. 代码很简单,只要熟悉ContentProvider 就可以了. public ...
- DDD 领域驱动设计-两个实体的碰撞火花
上一篇:<DDD 领域驱动设计-领域模型中的用户设计?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply.Sample(代码已更新) 在 ...
- C++ 事件驱动型银行排队模拟
最近重拾之前半途而废的C++,恰好看到了<C++ 实现银行排队服务模拟>,但是没有实验楼的会员,看不到具体的实现,正好用来作为练习. 模拟的是银行的排队叫号系统,所有顾客以先来后到的顺序在 ...
- arcgis api for js入门开发系列四地图查询(含源代码)
备注:由于实现本篇功能的需求,修改了地图数据的dlsearch.mxd,然后更新了地图服务,需要的在文章最后有提供最新的mxd以及源代码下载的 上一篇实现了demo的地图工具栏,本篇新增地图查询功能, ...
- AEAI DP V3.6.0 升级说明,开源综合应用开发平台
AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...
- Git学习笔记一:新建本地仓库及初始化
1.百度搜索Git下载安装,直接按默认选项安装即可. 例如:Git-2.7.2-32-bit_setup.1457942412.exe 2.配置Git信息,建立版本仓库 (Alt+PrintScerr ...
- 基于Ubuntu Hadoop的群集搭建Hive
Hive是Hadoop生态中的一个重要组成部分,主要用于数据仓库.前面的文章中我们已经搭建好了Hadoop的群集,下面我们在这个群集上再搭建Hive的群集. 1.安装MySQL 1.1安装MySQL ...