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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM