Szukaj…
Wprowadzenie
Dyskusja na temat różnych rodzajów wyzwalaczy dostępnych w WPF, w tym Trigger , DataTrigger , MultiTrigger , MultiDataTrigger i EventTrigger .
Wyzwalacze pozwalają dowolnej klasie, która wywodzi się z FrameworkElement lub FrameworkContentElement na ustawianie lub zmianę ich właściwości w oparciu o określone warunki określone w wyzwalaczu. Zasadniczo, jeśli element można stylizować, można go również uruchomić.
Uwagi
- Wszystkie wyzwalacze, z wyjątkiem
EventTriggermuszą być zdefiniowane w elemencie<Style>.EventTriggermoże być zdefiniowany w elemencie<Style>lub we właściwościTriggerskontrolki. - Elementy
<Trigger>mogą zawierać dowolną liczbę elementów<Setter>. Te elementy są odpowiedzialne za ustawianie właściwości elementu zawierającego, gdy warunek elementu<Trigger>jest spełniony. - Jeśli właściwość jest zdefiniowana w znaczniku elementu głównego, zmiana właściwości zdefiniowana w elemencie
<Setter>nie będzie obowiązywać, nawet jeśli warunek wyzwalania zostanie spełniony. Rozważ znacznik<TextBlock Text="Sample">. WłaściwośćTextkodu postępowania nigdy się nie zmieni w zależności od wyzwalacza, ponieważ definicje właściwości root mają pierwszeństwo przed właściwościami zdefiniowanymi w stylach. - Podobnie jak wiązania, po użyciu wyzwalacza nie można go modyfikować.
Spust
Najprostszy z pięciu typów wyzwalaczy, Trigger odpowiada za ustawianie właściwości na podstawie innych właściwości w ramach tego samego elementu sterującego .
<TextBlock>
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text" Value="Pass">
<Setter Property="Foreground" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
W tym przykładzie kolor pierwszego planu TextBlock zmieni kolor na zielony, gdy jego właściwość Text będzie równa ciągowi znaków "Pass" .
MultiTrigger
MultiTrigger jest podobny do standardowego Trigger , ponieważ ma zastosowanie tylko do właściwości w ramach tej samej kontroli . Różnica polega na tym, że MultiTrigger ma wiele warunków, które muszą zostać spełnione, zanim wyzwalacz zadziała. Warunki są definiowane za pomocą znacznika <Condition> .
<TextBlock x:Name="_txtBlock" IsEnabled="False">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Text" Value="Pass"/>
<Condition Property="IsEnabled" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Foreground" Value="Green"/>
</MultiTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
Zauważ, że MultiTrigger nie aktywuje się, dopóki nie zostaną spełnione oba warunki.
DataTrigger
DataTrigger może być dołączony do dowolnej właściwości, niezależnie od tego, czy jest to jego własna kontrola, inna kontrola, a nawet właściwość w klasie innej niż interfejs użytkownika. Rozważ następującą prostą klasę.
public class Cheese
{
public string Name { get; set; }
public double Age { get; set; }
public int StinkLevel { get; set; }
}
Które dołączymy jako DataContext w następującym TextBlock .
<TextBlock Text="{Binding Name}">
<TextBlock.DataContext>
<local:Cheese Age="12" StinkLevel="100" Name="Limburger"/>
</TextBlock.DataContext>
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding StinkLevel}" Value="100">
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
W poprzedzającym kodzie właściwość TextBlock.Foreground będzie miała TextBlock.Foreground zielony. Jeśli StinkLevel właściwość StinkLevel w naszym XAML na wartość inną niż 100, właściwość Text.Foreground powróci do wartości domyślnej.