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. En EventTrigger kan definieras antingen i ett <Style> -element eller en kontrolls Triggers 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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow