Zoeken…
Invoering
Discussie over de verschillende soorten Triggers die beschikbaar zijn in WPF, waaronder Trigger
, DataTrigger
, MultiTrigger
, MultiDataTrigger
en EventTrigger
.
Met triggers kan elke klasse die is afgeleid van FrameworkElement
of FrameworkContentElement
zijn eigenschappen instellen of wijzigen op basis van bepaalde voorwaarden die in de trigger zijn gedefinieerd. Kortom, als een element kan worden gestileerd, kan het ook worden geactiveerd.
Opmerkingen
- Alle triggers, behalve
EventTrigger
moeten binnen een element<Style>
worden gedefinieerd. EenEventTrigger
kan worden gedefinieerd in een<Style>
-element of in de eigenschapTriggers
een besturingselement. -
<Trigger>
-elementen kunnen een willekeurig aantal<Setter>
-elementen bevatten. Deze elementen zijn verantwoordelijk voor het instellen van eigenschappen op het bevattende element wanneer aan de voorwaarde van het<Trigger>
-element is voldaan. - Als een eigenschap is gedefinieerd in de root-elementmarkering, wordt de eigenschapsverandering die is gedefinieerd in het element
<Setter>
niet van kracht, zelfs niet als aan de trigger-voorwaarde is voldaan. Overweeg de markup<TextBlock Text="Sample">
. De eigenschapText
van de procedurecode verandert nooit op basis van een trigger omdat definities van rooteigenschappen voorrang hebben op eigenschappen die in stijlen zijn gedefinieerd. - Net als bindingen kan deze niet meer worden gewijzigd nadat een trigger is gebruikt.
Op gang brengen
De eenvoudigste van de vijf triggertypen, de Trigger
is verantwoordelijk voor het instellen van eigenschappen op basis van andere eigenschappen binnen hetzelfde besturingselement .
<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 dit voorbeeld wordt de voorgrondkleur van het TextBlock
groen als de eigenschap Text
gelijk is aan de tekenreeks "Pass"
.
MultiTrigger
Een MultiTrigger
is vergelijkbaar met een standaard Trigger
doordat deze enkel voor eigenschappen binnen hetzelfde bedieningsorgaan. Het verschil is dat een MultiTrigger
meerdere voorwaarden heeft waaraan moet worden voldaan voordat de trigger zal werken. Voorwaarden worden gedefinieerd met behulp van de tag <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>
Merk op dat de MultiTrigger
pas wordt geactiveerd als aan beide voorwaarden is voldaan.
DataTrigger
Een DataTrigger
kan aan elke eigenschap worden gekoppeld, of het nu een eigen besturing is, een andere besturing of zelfs een eigenschap in een niet-UI-klasse. Overweeg de volgende eenvoudige klasse.
public class Cheese
{
public string Name { get; set; }
public double Age { get; set; }
public int StinkLevel { get; set; }
}
Die we zullen hechten als de DataContext
in het volgende 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>
In de voorgaande code is de eigenschap TextBlock.Foreground
Groen. Als we de eigenschap StinkLevel
in onze XAML wijzigen in iets anders dan 100, wordt de eigenschap Text.Foreground
teruggezet naar de standaardwaarde.