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
EventTriggerdevono essere definiti all'interno di un elemento<Style>. UnEventTriggerpuò essere definito in un elemento<Style>o in una proprietàTriggersun 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àTextdel 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.