zoukankan      html  css  js  c++  java
  • WPF触发器

    WPF快速指导6:触发器
        本文摘要:
        1:属性触发器;
        2:数据触发器;
        3:事件触发器;

        Style、ControlTemplate 和 DataTemplate 都有触发器集合。
        属性触发器只检查WPF从属属性,而数据触发器则可检查任何一种可绑定的属性。属性触发器一般用来检查WPF可视元素的属性,而数据触发器则通常用来检查不可视对象的属性。
        属性触发器:通过此机制,一个属性的更改会在另一个属性中触发即时或动态更改。
        数据触发器:通过此机制,事件会在属性中触发动态更改。
        数据触发器:EventTrigger,它根据事件的引发来启动一组操作,但这类操作仅限于动画。


    一:属性触发器

        查看代码片段1:

       <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.0。

    1.1单个触发器
        代码片段1就是单个触发器。

    1.2多个触发器

        可以为ListBoxItem设置多个触发器。

    1.3多条件属性触发器

        多条件触发器就是说,同时满足几个条件的时候才触发行为。
        如代码片段2: 

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

    二:数据触发器
        使用 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>

    2.1单条件触发
        以上的DataTrigger就是一个单条件触发器。

    2.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>
  • 相关阅读:
    HDU 2852 KiKi's K-Number (主席树)
    HDU 2089 不要62
    Light oj 1140 How Many Zeroes?
    Bless You Autocorrect!
    HDU 6201 transaction transaction transaction
    HDU1561 The more ,The better (树形背包Dp)
    CodeForces 607B zuma
    POJ 1651 Mulitiplication Puzzle
    CSUOJ 1952 合并石子
    Uva 1599 Ideal path
  • 原文地址:https://www.cnblogs.com/luluping/p/2117681.html
Copyright © 2011-2022 走看看