Suche…


Einführung

Erörterung der verschiedenen in WPF verfügbaren DataTrigger , einschließlich Trigger , DataTrigger , MultiTrigger , MultiDataTrigger und EventTrigger .

Auslöser ermöglichen jeder Klasse, die von FrameworkElement oder FrameworkContentElement , ihre Eigenschaften basierend auf bestimmten im Auslöser definierten Bedingungen festzulegen oder zu ändern. Wenn ein Element formatiert werden kann, kann es auch ausgelöst werden.

Bemerkungen

  • Alle Trigger außer EventTrigger müssen in einem <Style> -Element definiert werden. Ein EventTrigger kann entweder in einem <Style> -Element oder in der Triggers Eigenschaft eines Steuerelements definiert werden.
  • <Trigger> -Elemente können eine beliebige Anzahl von <Setter> -Elementen enthalten. Diese Elemente sind für das Festlegen von Eigenschaften für das enthaltende Element verantwortlich, wenn die Bedingung des <Trigger> -Elements erfüllt ist.
  • Wenn eine Eigenschaft im Wurzelelement-Markup definiert ist, wird die im Element <Setter> definierte Eigenschaftsänderung nicht wirksam, auch wenn die Triggerbedingung erfüllt ist. Betrachten Sie das Markup <TextBlock Text="Sample"> . Die Text Eigenschaft des Vorgangscodes ändert sich niemals basierend auf einem Trigger, da Root-Eigenschaftendefinitionen Vorrang vor Eigenschaften haben, die in Stilen definiert sind.
  • Sobald ein Trigger verwendet wurde, kann er nicht mehr geändert werden.

Auslösen

Der einfachste der fünf Triggertypen, der Trigger ist dafür verantwortlich, Eigenschaften basierend auf anderen Eigenschaften innerhalb desselben Steuerelements festzulegen .

<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>

In diesem Beispiel wird die Vordergrundfarbe des TextBlock grün, wenn die Eigenschaft Text der Zeichenfolge "Pass" .

MultiTrigger

Ein MultiTrigger ähnelt einem Standard- Trigger , da er nur für Eigenschaften innerhalb desselben Steuerelements gilt . Der Unterschied ist, dass ein MultiTrigger mehrere Bedingungen hat, die erfüllt sein müssen, bevor der Trigger ausgelöst wird. Bedingungen werden mit dem <Condition> -Tag definiert.

<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>

Beachten Sie, dass der MultiTrigger erst aktiviert wird, wenn beide Bedingungen erfüllt sind.

DataTrigger

Ein DataTrigger kann an jede Eigenschaft angehängt werden, sei es auf einem eigenen Steuerelement, einem anderen Steuerelement oder sogar auf einer Eigenschaft in einer Nicht-UI-Klasse. Betrachten Sie die folgende einfache Klasse.

public class Cheese
{
    public string Name { get; set; }
    public double Age { get; set; }
    public int StinkLevel { get; set; }
}

Welche werden wir als anhängen DataContext in der folgenden 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>

Im TextBlock.Foreground Code ist die Eigenschaft TextBlock.Foreground grün. Wenn wir die StinkLevel Eigenschaft in unserer XAML auf etwas anderes als 100 Text.Foreground , wird die Text.Foreground Eigenschaft auf ihren Standardwert zurückgesetzt.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow