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

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

  #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,希望能多多关注~

目录
相关文章
|
C# Windows
2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>
2000条你应知的WPF小姿势 基础篇<78-81 Dialog/Location/WPF设备无关性>
80 0
|
C# Windows
2000条你应知的WPF小姿势 基础篇<74-77 WPF 多窗口Tips>
2000条你应知的WPF小姿势 基础篇<74-77 WPF 多窗口Tips>
105 0
|
3月前
|
开发框架 前端开发 JavaScript
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(8) -- 使用Converter类实现内容的转义处理
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(8) -- 使用Converter类实现内容的转义处理
|
C#
2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>
2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>
91 0
|
C#
2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
109 0
|
IDE C# 开发工具
2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>
56 0
|
存储 安全 程序员
2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>
2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>
35 0
2000条你应知的WPF小姿势 基础篇<34-39 Unhandled Exceptions和Resource>
|
C#
2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>
2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>
47 0
|
存储 开发框架 .NET
2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>
2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>
44 0
|
3月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件