在正文开始之前需要介绍一个人: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类逻辑结构>的更多相关文章

  1. 2000条你应知的WPF小姿势 基础篇<15-21>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师,对C#和WPF有着极深的热情.最为出色的是他维护了两个博客:2,000Things You Should Know ...

  2. 2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  3. 2000条你应知的WPF小姿势 基础篇<74-77 WPF 多窗口Tips>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  4. 2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  5. 2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  6. 2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>

    前一阵子由于个人生活原因,具体见上一篇,耽搁了一阵子,在这里也十分感谢大家支持和鼓励.现在开始继续做WPF2000系列. 在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件 ...

  7. 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  8. 2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

  9. 2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

随机推荐

  1. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  2. Base64编码

    Base64编码 写在前面 今天在做一个Android app时遇到了一个问题:Android端采用ASE对称加密的数据在JavaWeb(jre1.8.0_7)后台解密时,居然解密失败了!经过测试后发 ...

  3. 创建 OVS Local Network - 每天5分钟玩转 OpenStack(129)

    上一节我们完成了 OVS 的准备工作,本节从最基础的 local network 开始学习.local network 不会与宿主机的任何物理网卡连接,流量只被限制在宿主机内,同时也不关联任何的 VL ...

  4. 设置tomcat远程debug

    查看端口占用情况命令: netstat -tunlp |grep 8000 tomcat 启动远程debug: startup.sh 中的最后一行 exec "$PRGDIR"/& ...

  5. CSS样式重置(转)

    body,h1,h2,h3,h4,h5,h6,dl,dt,dd,ul,ol,li,th,td,p,blockquote,pre,form,fieldset,legend,input,button,te ...

  6. 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第十二节)

    好的,那么在上一节中呢,评论功能的后台已经写好了,这一节,先把这部分后台代码和前台对接一下. 1.评论功能实现 我们修改一下保存评论按钮的点击事件,用jQuery的方式获取文本框中的值,然后通过aja ...

  7. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

  8. Linux常用命令

    命令格式与目录处理命令 ls 命令格式与目录处理命令 ls 命令格式:命令 [-选项][参数] 例:ls -la /etc 说明: 1)个别命令使用不遵循格式 2)当有多个选项时,可以写在一起 3)简 ...

  9. 整体二分QAQ

    POJ 2104 K-th Number 时空隧道 题意: 给出一个序列,每次查询区间第k小 分析: 整体二分入门题? 代码: #include<algorithm> #include&l ...

  10. [PHP源码阅读]explode和implode函数

    explode和implode函数主要用作字符串和数组间转换的操作,比如获取一段参数后根据某个字符分割字符串,或者将一个数组的结果使用一个字符合并成一个字符串输出.在PHP中经常会用到这两个函数,因此 ...