2010-02-10 27 views
9

Trình kích hoạt khác nhau trong WPF là gì? Chúng khác nhau như thế nào và khi nào tôi nên sử dụng chúng?Trình kích hoạt khác nhau trong WPF là gì?

Tôi đã nhìn thấy những nguyên nhân sau đây:

  • Kích hoạt
  • DataTrigger
  • MultiTrigger
  • MultiDataTrigger
  • EventTrigger

Trả lời

20

Một kích hoạt thường được sử dụng trong một Style hay ControlTemplate. Nó kích hoạt trên các thuộc tính của điều đang được tạo khuôn mẫu và đặt các thuộc tính khác của điều khiển (hoặc các phần tử mẫu cụ thể). Ví dụ: bạn sẽ sử dụng Trình kích hoạt trên IsMouseOver để phản hồi chuột nằm trên điều khiển và trình cài đặt có thể cập nhật bàn chải để hiển thị hiệu ứng "nóng".

Một DataTrigger kích hoạt trên một ràng buộc dữ liệu hơn là trên một thuộc tính điều khiển. Nó thường được sử dụng trong một DataTemplate. Ví dụ, bạn có thể sử dụng một DataTrigger để thay đổi màu sắc của một phần tử trong DataTemplate nếu thuộc tính AlertLevel bằng ZomgWereAllGoingToDie. DataTriggers cũng có thể hữu ích trong các mẫu kiểm soát nếu bạn muốn kích hoạt trên thuộc tính điều khiển "được chuyển đổi" (tức là sử dụng một IValueConverter trong thử nghiệm kích hoạt). Ví dụ, bạn có thể sử dụng một DataTrigger để biến màu đỏ của Foreground TextBox nếu thuộc tính Text, được coi là số, là âm, bằng cách sử dụng một DataTrigger với IValueConverter phù hợp và RelativeSource của Self hoặc TemplatedParent.

MultiTrigger và MultiDataTrigger giống nhau, ngoại trừ chúng cho phép bạn chỉ định nhiều điều kiện (thuộc tính hoặc liên kết tương ứng) và chỉ có hiệu lực khi tất cả các điều kiện được thỏa mãn.

Cuối cùng, EventTrigger được sử dụng để kích hoạt các hành động để đáp ứng với các sự kiện (trái với việc thay đổi một phần của trạng thái để đáp ứng với một phần khác của trạng thái). Ví dụ, bạn có thể sử dụng EventTrigger để trả lời sự kiện MouseEnter. EventTriggers thường được sử dụng để thực hiện các bảng phân cảnh, ví dụ để thực hiện một hoạt ảnh khi sự kiện xảy ra.

+0

+1 Câu trả lời kỹ lưỡng với ví dụ hay. – statenjason

+0

Thx! Rất rõ ràng. Đúng thứ tôi cần! – stiank81

+0

Sách kỹ thuật mong muốn sử dụng nhiều ví dụ hơn. Hữu ích khi bạn chỉ muốn lướt qua các chủ đề. – arviman

10

A Trigger thường được sử dụng trong một Style hoặc ControlTemplate. Nó kích hoạt trên thuộc tính của bất cứ điều gì đang được templated, và thiết lập các thuộc tính khác của điều khiển (hoặc các yếu tố mẫu cụ thể). Ví dụ: bạn sẽ sử dụng Trình kích hoạt trên IsMouseOver để phản hồi chuột nằm ngoài tầm kiểm soát và setters có thể cập nhật bàn chải để hiển thị hiệu ứng "nóng".

Tại sao sử dụng Trình kích hoạt?

Trình kích hoạt được sử dụng theo kiểu để thực hiện các tác vụ thay đổi bất kỳ giá trị thuộc tính hoặc sự kiện nào xảy ra. Trình kích hoạt tạo hiệu ứng trực quan trên các điều khiển. Bằng cách sử dụng Triggers, chúng ta có thể thay đổi sự xuất hiện của Framework Elements.

Có bao nhiêu loại trình kích hoạt trong WPF?

Có năm loại trình kích hoạt được WPF hỗ trợ; đó là:

  1. tài sản Kích hoạt
  2. dữ liệu kích hoạt
  3. MultiTrigger
  4. MultiDataTrigger
  5. kích hoạt sự kiện

tài sản Kích hoạt

Các hình thức đơn giản nhất của kích hoạt là một kích hoạt thuộc tính, mà đồng hồ cho một thuộc tính phụ thuộc để có một giá trị nhất định. Ví dụ: nếu chúng ta muốn bật một nút màu vàng khi người dùng di chuyển chuột lên đó, chúng ta có thể làm điều đó bằng cách xem thuộc tính IsMouseOver để có giá trị là "True".

Property Trigger Thực thi Bộ sưu tập của người định cư, khi giá trị thuộc tính UIElements thay đổi.

Để tạo trình kích hoạt thuộc tính trên mọi điều khiển, bạn phải đặt trình kích hoạt theo kiểu điều khiển.

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}"> 
    <Style.Triggers> 
     <Trigger Property="IsPressed" Value="True"> 
      <Setter Property="Opacity" Value="0.5" /> 
     </Trigger> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Foreground" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Trong mã trên, Trigger được tạo trên Nút. Nó sẽ đặt Opacity thành 0,5 khi các nút IsPressed thay đổi thuộc tính. bạn có thể đặt kích hoạt trên bất kỳ Thuộc tính phụ thuộc nào của điều khiển. ví dụ:

<Style x:Key="NormalStyle"> 
      <Setter Property="Control.FontSize" Value="20"></Setter> 
      <Setter Property="Control.HorizontalAlignment" Value="Center"></Setter> 
      <Setter Property="Control.Margin" Value="10"></Setter> 
      <Setter Property="Control.Foreground" Value="Black"></Setter> 
            <Style.Triggers> 
                <Trigger Property="Control.IsMouseOver" Value="true"> 
                    <Setter Property="Control.FontStyle" Value="Italic"></Setter> 
                    <Setter Property="Control.Foreground" Value="Red"></Setter> 
                    <Setter Property="Control.Background" Value="Yellow"></Setter> 
                </Trigger> 
                <Trigger Property="Button.IsPressed" Value="true"> 
                    <Setter Property="Control.Foreground" Value="Green"></Setter> 
                    <Setter Property="Control.Background" Value="Blue"></Setter> 
                </Trigger>               
            </Style.Triggers> 
     </Style> 

MultiTrigger

MultiTrigger được sử dụng để thiết lập hành động trên Nhiều thay đổi tài sản. Nó sẽ thực thi khi tất cả điều kiện thỏa mãn trong phạm vi MulitTrigger .Điều kiện.

<Style x:Key="MulitTriggerButtonStyle" TargetType="Button"> 
    <Style.Triggers> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition Property="IsPressed" Value="True" /> 
       <Condition Property="Background" Value="BlanchedAlmond" /> 
      </MultiTrigger.Conditions> 
      <MultiTrigger.Setters> 
       <Setter Property="Foreground" Value="Blue" /> 
       <Setter Property="BorderThickness" Value="5" /> 
       <Setter Property="BorderBrush" Value="Blue" /> 
      </MultiTrigger.Setters> 
     </MultiTrigger> 
    </Style.Triggers> 
</Style> 

kích hoạt sự kiện

Event Trigger sử dụng thực hiện thao tác khi RoutedEvent của FrameworkElement tăng. Event Trigger thường được sử dụng để thực hiện một số hoạt ảnh trên điều khiển (như: colorAnimation, doubleAnumation bằng KeyFrame, v.v.)

Trước hết hãy hiểu StoryboardAnimation.

Animations:

Một hình ảnh động có thể cung cấp giao diện người dùng hấp dẫn hơn với cái nhìn và cảm nhận. Chúng tôi cũng có thể tạo hiệu ứng hình ảnh về sự kiểm soát, hoạt hình có thể là bất kỳ kiểu như:

 màu nền thay đổi của điều khiển  màn hình xoay ở 90 độ góc đối tượng  di chuyển từ nơi này đến nơi khác  Thay đổi Opacity (FadeIn/FadeOut) của vòng kết nối.

Hoạt ảnh được sử dụng với Thuộc tính của UIElement.WPF cung cấp các loại khác nhau của hình ảnh động sử dụng với bất động sản, như:

ColorAnimation: sử dụng để động/thay đổi thuộc tính màu (SolidColorBrush, LinearGradientBrush) của UIElement trên Thời gian cụ thể. Nó có hai thuộc tính:

Từ (source) và To (mục tiêu)

<Border Name="border1" Width="100" Height="30" 
    BorderBrush="Black" BorderThickness="1"> 
    <Border.Background> 
     <SolidColorBrush x:Name="MyBorder" Color="LightBlue" /> 
    </Border.Background> 
    <Border.Triggers> 
     <EventTrigger RoutedEvent="Mouse.MouseEnter"> 
      <BeginStoryboard> 
       <Storyboard> 
       <ColorAnimation Duration="0:0:1" 
        Storyboard.TargetName="MyBorder" 
        Storyboard.TargetProperty="Color" To="Gray" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Border.Triggers> 
</Border> 

Ví dụ 2:

<TextBlock Visibility="Collapsed" Style="{StaticResource CDCStandardTextBlockStyle}" Name="TxtBlockTerminatingHeading" Text="{Binding NotifyOnTargetUpdated=True}" Foreground="Red" TextWrapping="Wrap" Margin="10,10,10,0"> 
<TextBlock.Triggers> 
        <EventTrigger RoutedEvent="Binding.TargetUpdated"> 
         <EventTrigger.Actions> 
          <BeginStoryboard> 
           <Storyboard BeginTime="00:00:00" RepeatBehavior="Forever" 
Storyboard.TargetName="TxtBlockTerminatingHeading" 
Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)"> 
            <ColorAnimation From="Red" To="#f0f0f0" 
Duration="0:0:1"/> 
           </Storyboard> 
          </BeginStoryboard> 
         </EventTrigger.Actions> 
        </EventTrigger> 
       </TextBlock.Triggers> 
      </TextBlock> 

Ví dụ 3:

<ListBox Name="employeeListBox" ItemsSource="{Binding 
empList}" Grid.Row="0" SelectedItem="{Binding SelectedIndex}"> 
      <i:Interaction.Triggers> 
        <i:EventTrigger EventName="SelectionChanged"> 
          <i:InvokeCommandAction Command="{Binding MyCommand}" CommandParameter="{Binding 
ElementName=employeeListBox, Path=SelectedValue}"/> 
        </i:EventTrigger> 
      </i:Interaction.Triggers> 
    </ListBox> 

DataTrigger

DataTriggers là Trình kích hoạt xem giá trị bị ràng buộc thay vì DependencyProperty. Chúng cho phép bạn xem một biểu thức ràng buộc và sẽ phản ứng khi liên kết đó đánh giá bằng giá trị của bạn. Như tên đề xuất, DataTrigger áp dụng giá trị thuộc tính để thực hiện hành động trên Dữ liệu ràng buộc với UIElement. DataTrigger cho phép đặt giá trị thuộc tính khi Dữ liệu ràng buộc khớp với điều kiện được chỉ định. Ví dụ:

<DataTemplate> 
    <Grid Margin="0 5 0 0"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 
     <Image x:Name="viewImage" 
      Grid.Row="0" Width="100"    
      Height="60" HorizontalAlignment="Center"    
      Source="{Binding Picture}" Stretch="Fill" />    
     <TextBlock x:Name="viewText" 
      Grid.Row="1" Margin="0 5 0 0"    
      HorizontalAlignment="Center" 
      FontWeight="Black" Foreground="Green"    
      Text="{Binding Title}" /> 
    </Grid> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding Path=Picture}" Value="{x:Null}"> 
     <Setter TargetName="viewImage" Property="Source" Value="/Images/noImage.png" /> 
     <Setter TargetName="viewText" Property="Text" Value="No Image Available" /> 
     <Setter TargetName="viewText" Property="Foreground" Value="Red" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 
<Style.Triggers> 
                <DataTrigger Binding="{Binding ElementName=textBox1, Path=Text.Length}" 
Value="0"> 
                    <Setter Property="IsEnabled" Value="False"></Setter> 
                </DataTrigger> 
      </Style.Triggers> 
     </Style> 

MultiDataTrigger

MultiTriggerMultiDataTrigger đều giống nhau, ngoại trừ họ cho phép bạn chỉ định nhiều điều kiện (các thuộc tính hoặc các ràng buộc tương ứng) và chỉ có hiệu lực khi có đủ điều kiện được thỏa mãn.

<DataTemplate.Triggers> 
    <MultiDataTrigger> 
     <MultiDataTrigger.Conditions> 
      <Condition Binding="{Binding Path=Picture}" Value="{x:Null}" /> 
      <Condition Binding="{Binding Path=Title}" Value="Waterfall" /> 
     </MultiDataTrigger.Conditions> 
     <MultiDataTrigger.Setters> 
      <Setter TargetName="viewImage" Property="Source" Value="/Images/noImage.png"/> 
      <Setter TargetName="viewImage" Property="Opacity" Value="0.5" /> 
      <Setter TargetName="viewText" Property="Background" Value="Brown" /> 
     </MultiDataTrigger.Setters> 
    </MultiDataTrigger> 
</DataTemplate.Triggers> 
Các vấn đề liên quan