Ricerca…


introduzione

Discussione sui vari tipi di Trigger disponibili in WPF, inclusi Trigger , DataTrigger , MultiTrigger , MultiDataTrigger ed EventTrigger .

I trigger consentono a qualsiasi classe derivante da FrameworkElement o FrameworkContentElement di impostare o modificare le proprietà in base a determinate condizioni definite nel trigger. Fondamentalmente, se un elemento può essere stilizzato, può essere attivato anche.

Osservazioni

  • Tutti i trigger, ad eccezione di EventTrigger devono essere definiti all'interno di un elemento <Style> . Un EventTrigger può essere definito in un elemento <Style> o in una proprietà Triggers un controllo.
  • <Trigger> elementi <Trigger> possono contenere qualsiasi numero di elementi <Setter> . Questi elementi sono responsabili per l'impostazione delle proprietà sull'elemento contenitore quando viene soddisfatta la condizione dell'elemento <Trigger> .
  • Se una proprietà è definita nel markup dell'elemento radice, la modifica della proprietà definita nell'elemento <Setter> non avrà effetto, anche se la condizione di innesco è stata soddisfatta. Considera il markup <TextBlock Text="Sample"> . La proprietà Text del codice procedente non cambierà mai in base a un trigger, poiché le definizioni delle proprietà root prendono precauzioni rispetto alle proprietà definite negli stili.
  • Come i binding, una volta che è stato usato un trigger, non può essere modificato.

grilletto

Il più semplice dei cinque tipi di trigger, il Trigger è responsabile per l'impostazione delle proprietà in base ad altre proprietà all'interno dello stesso controllo .

<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 questo esempio, il colore di primo piano di TextBlock diventerà verde quando la proprietà Text è uguale alla stringa "Pass" .

MultiTrigger

Un MultiTrigger è simile a un Trigger standard in quanto si applica solo alle proprietà all'interno dello stesso controllo . La differenza è che un MultiTrigger ha più condizioni che devono essere soddisfatte prima che il trigger funzioni. Le condizioni sono definite usando il 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>

Notare che il MultiTrigger non si attiverà finché non saranno soddisfatte entrambe le condizioni.

DataTrigger

Un DataTrigger può essere collegato a qualsiasi proprietà, sia esso sotto il proprio controllo, un altro controllo o anche una proprietà in una classe non UI. Considera la seguente classe semplice.

public class Cheese
{
    public string Name { get; set; }
    public double Age { get; set; }
    public int StinkLevel { get; set; }
}

Che collegheremo come DataContext nel seguente 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>

Nel codice precedente, la proprietà TextBlock.Foreground sarà verde. Se cambiamo la proprietà StinkLevel nel nostro XAML in qualcosa di diverso da 100, la proprietà Text.Foreground tornerà al suo valore predefinito.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow