zoukankan      html  css  js  c++  java
  • wpf 触发器理解

    (1)属性触发器:其对应的类是Trigger。它在特定关联属性发生变化时被触发。一个属性的更改会在另一个属性中触发即时或动态更改。

    (2)数据触发器:其对应的类是DataTrigger。它在特定的CLR类型所记录的值发生变化时被触发。事件会在属性中触发动态更改。

    (3)事件触发器:其对应的类是EventTrigger。它将在特定的路由事件发生时被触发。但这类操作仅限于动画。

    在WPF中,每一个可以使用触发器的类中都会有一个Triggers属性。拥有这个属性的类有:FrameworkElement,Style,DataTemplate和ControlTemplate。但是需要注意的是,FrameworkElement类只支持EventTrigger。这是因为微软还没有完成它对其他两类触发器的支持。如果程序中需要使用属性触发器或数据触发器的功能,软件开发人员就需要使用设置样式触发器的方法对触发器进行一次包装,再将该样式应用在FrameworkElement类的实例上。因此就现在来说,Trigger和EventTrigger仅可以用在控件模板或样式中,而DataTrigger则只能用在数据模板之中。因此在这里所讲解的对触发器的应用仅限于对Trigger元素的直接使用,而并不涉及其他复杂的使用。

    同时,为了支持对复杂触发条件的表示,WPF还引入了MultiTrigger和MultiDataTrigger完成对与逻辑的支持。如果想用触发器表示或逻辑,软件开发人员可以通过将多个触发器同时放置到Triggers属性中完成。

    一:属性触发器

    <Style TargetType="ListBoxItem">
          <Setter Property="Opacity" Value="0.5" />
          <Setter Property="MaxHeight" Value="75" />
          <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
              <Trigger.Setters>
                <Setter Property="Opacity" Value="1.0" />
              </Trigger.Setters>
            </Trigger>
          </Style.Triggers>
        </Style>
    
    
        <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsFocused" Value="True"></Condition>
                            <Condition Property="Content" Value="{x:Null}"></Condition>
                        </MultiTrigger.Conditions>
                        <Setter Property="ToolTip" Value="content is null!"></Setter>
                    </MultiTrigger>

    二:数据触发器

                <Style TargetType="ListBoxItem">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=State}" Value="WA">
                            <Setter Property="Foreground" Value="Red" />
                        </DataTrigger>
                        <MultiDataTrigger>
                            <MultiDataTrigger.Conditions>
                                <Condition Binding="{Binding Path=Name}" Value="Portland" />
                                <Condition Binding="{Binding Path=State}" Value="OR" />
                            </MultiDataTrigger.Conditions>
                            <Setter Property="Background" Value="Cyan" />
                        </MultiDataTrigger>
                    </Style.Triggers>
                </Style>

    三:事件触发器

    <Style TargetType="ListBoxItem">
          <Setter Property="Opacity" Value="0.5" />
          <Setter Property="MaxHeight" Value="75" />
          <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
              <Trigger.Setters>
                <Setter Property="Opacity" Value="1.0" />
              </Trigger.Setters>
            </Trigger>
            <EventTrigger RoutedEvent="Mouse.MouseEnter">
              <EventTrigger.Actions>
                <BeginStoryboard>
                  <Storyboard>
                    <DoubleAnimation
                      Duration="0:0:0.2"
                      Storyboard.TargetProperty="MaxHeight"
                      To="90"  />
                  </Storyboard>
                </BeginStoryboard>
              </EventTrigger.Actions>
            </EventTrigger>
            <EventTrigger RoutedEvent="Mouse.MouseLeave">
              <EventTrigger.Actions>
                <BeginStoryboard>
                  <Storyboard>
                    <DoubleAnimation
                      Duration="0:0:1"
                      Storyboard.TargetProperty="MaxHeight"  />
                  </Storyboard>
                </BeginStoryboard>
              </EventTrigger.Actions>
            </EventTrigger>
          </Style.Triggers>
        </Style>
  • 相关阅读:
    .Net中集合排序还可以这么玩
    C# 6.0中你不知道的新特性
    EF Core利用Transaction对数据进行回滚保护
    dot watch+vs code提升asp.net core开发效率
    .Net小白的大学四年,内含面经
    EF Core利用Scaffold从根据数据库生成代码
    利用EF Core的Join进行多表查询
    EF Core下利用Mysql进行数据存储在并发访问下的数据同步问题
    新建.Net Core应用程序后引用项一直黄色感叹号怎么办?
    用户密码传输和存储的保护
  • 原文地址:https://www.cnblogs.com/m7777/p/6084078.html
Copyright © 2011-2022 走看看