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>
. UnEventTrigger
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.