Sök…
Introduktion
Diskussion om de olika typerna av utlösare som finns tillgängliga i WPF, inklusive Trigger
, DataTrigger
, MultiTrigger
, MultiDataTrigger
och EventTrigger
.
Triggers tillåter varje klass som härrör från FrameworkElement
eller FrameworkContentElement
att ställa in eller ändra sina egenskaper baserat på vissa villkor som definieras i utlösaren. I grund och botten, om ett element kan utformas, kan det också triggas.
Anmärkningar
- Alla triggers, med undantag för
EventTrigger
måste definieras i ett<Style>
-element. EnEventTrigger
kan definieras antingen i ett<Style>
-element eller en kontrollsTriggers
egenskap. -
<Trigger>
-element kan innehålla valfritt antal<Setter>
-element. Dessa element är ansvariga för att ställa in egenskaper på det innehållande elementet när<Trigger>
-elementets villkor är uppfylld. - Om en egenskap definieras i rotelementmarkeringen kommer inte egendomsförändringen som definieras i
<Setter>
-elementet att träda i kraft, även om triggervillkoret har uppfyllts. Överväg markeringen<TextBlock Text="Sample">
.Text
för den fortskridande koden kommer aldrig att ändras baserat på en trigger eftersom rotegenskapsdefinitioner har företräde framför egenskaper definierade i stilar. - Liksom bindningar kan den inte ändras när en trigger har använts.
trigger
Trigger
är den enklaste av de fem Trigger
ansvarar för att ställa in egenskaper baserade på andra egenskaper inom samma kontroll .
<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>
I det här exemplet blir förgrundsfärgen på TextBlock
grön när Text
egenskapen är lika med strängen "Pass"
.
MultiTrigger
En MultiTrigger
liknar en standardutlösare Trigger
den endast gäller egenskaper inom samma kontroll . Skillnaden är att en MultiTrigger
har flera villkor som måste vara uppfyllda innan avtryckaren kommer att fungera. Villkoren definieras med <Condition>
-taggen.
<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>
Observera att MultiTrigger
kommer att aktiveras förrän båda villkoren är uppfyllda.
DataTrigger
En DataTrigger
kan DataTrigger
till valfri egendom, vare sig det är på egen kontroll, en annan kontroll eller till och med en fastighet i en icke UI-klass. Tänk på följande enkla klass.
public class Cheese
{
public string Name { get; set; }
public double Age { get; set; }
public int StinkLevel { get; set; }
}
Som vi kommer att bifoga som DataContext
i följande 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>
I föregående kod kommer egenskapen TextBlock.Foreground
att vara grön. Om vi ändrar egenskapen StinkLevel
i vår XAML till något annat än 100, Text.Foreground
egenskapen Text.Foreground
att återgå till standardvärdet.