zoukankan      html  css  js  c++  java
  • WPF触发器(trigger)详解

    属性触发器 

    <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>

    表示 ListBoxItem的isselected属性值为true 时,其Opacity值为1

    数据触发器 

      使用 DataTrigger,可以在数据对象的属性值与指定的 Value 匹配时设置属性值。例如,在显示 Employee 对象列表时,可能希望前景色根据每个 Employee 的当前出勤情况而变化。(例如,用紫色前景色显示当前正在休假的 Employee。)
        查看代码片段3

           <Window.Resources>
                <c:Places x:Key="PlacesData"/>
    
                <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>
    
                <DataTemplate DataType="{x:Type c:Place}">
                    <Canvas Width="160" Height="20">
                        <TextBlock FontSize="12"
                 Width="130" Canvas.Left="0" Text="{Binding Path=Name}"/>
                        <TextBlock FontSize="12" Width="30"
                     Canvas.Left="130" Text="{Binding Path=State}"/>
                    </Canvas>
                </DataTemplate>
            </Window.Resources>
    
            <StackPanel>
                <TextBlock FontSize="18" Margin="5" FontWeight="Bold"
        HorizontalAlignment="Center">Data Trigger Sample</TextBlock>
                <ListBox Width="180" HorizontalAlignment="Center" Background="Honeydew"
        ItemsSource="{Binding Source={StaticResource PlacesData}}"/>
            </StackPanel>
    1.单条件触发    以上的DataTrigger就是一个单条件触发器。
    2. 多条件触发器 以上的MultiDataTrigger就是一个多条件触发器。
     

    事件触发器

    属性触发器用来检查从属属性的值,数据触发器用来检查CLR属性的值,而事件触发器用来监视事件。当一个事件发生的时候,事件触发器就会通过引发相关的动画事件来响应。
        如代码片段4:
        <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>
  • 相关阅读:
    简明python教程九----异常
    简明python教程八----输入/输出
    简明python教程七----面向对象的编程(下)
    vue --- 生命周期
    es6 ----- export 和 import
    jq ---- 实现浏览器全屏
    Vue项目自动转换 px 为 rem,高保真还原设计图
    vue ---- 实现手机端(左滑 删除。右划 正常)
    js---- localStorage的基本用法
    点击 下载文件保存
  • 原文地址:https://www.cnblogs.com/wuxigang/p/2673681.html
Copyright © 2011-2022 走看看