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

    http://www.cnblogs.com/luluping/archive/2011/07/26/2117681.html

    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>


  • 相关阅读:
    软件工程第一次作业
    软件工程第五次作业——结对编程 小学四则运算自动生成程序
    软件工程第四次作业——结对编程第一次作业
    软件工程第三次作业——最大连续子数组和
    软件工程——第二次作业
    第一篇博客——我的大学
    结对编程第二次作业
    结对编程第一次作业
    软件工程第三次作业
    软件工程第二次作业
  • 原文地址:https://www.cnblogs.com/bincoding/p/7390203.html
Copyright © 2011-2022 走看看