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à:
- tài sản Kích hoạt
- dữ liệu kích hoạt
- MultiTrigger
- MultiDataTrigger
- 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 Storyboard
và Animation
.
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ì Dependency
Property
. 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
MultiTrigger
và MultiDataTrigger
đề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>
+1 Câu trả lời kỹ lưỡng với ví dụ hay. – statenjason
Thx! Rất rõ ràng. Đúng thứ tôi cần! – stiank81
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