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. Een EventTrigger kan worden gedefinieerd in een <Style> -element of in de eigenschap Triggers 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 eigenschap Text 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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow