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 EventTrigger muszą być zdefiniowane w elemencie <Style> . EventTrigger może być zdefiniowany w elemencie <Style> lub we właściwości Triggers kontrolki.
  • 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ść Text kodu 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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow