2000条你应知的WPF小姿势 基础篇<63-68 Trigger

系统 1738 0

原文: 2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>

  在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师。最为出色的是他维护了两个博客: 2,000 Things  You 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元素控件的类继承图

2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>

 

  #68 WPF UI元素的四个基础类

  存在四个基础类,大多数UI元素继承自它们,或者你自己定制一些类的时候也是继承自它们。

  1. ContentElement, 2. FrameworkContentElement, 3. UIElement, 4. FrameworkElement.

2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>

 

  下一期会有更多关于WPF内置结构的Tips,希望能多多关注~

2000条你应知的WPF小姿势 基础篇<63-68 Triggers和WPF类逻辑结构>


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论