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. EinEventTrigger
kann entweder in einem<Style>
-Element oder in derTriggers
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">
. DieText
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.