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>

你可能感兴趣的:(WPF)