posts - 315, comments - 268, trackbacks - 15

My Links

News

View Pietro Libro's profile on LinkedIn

DomusDotNet
   DomusDotNet

Pietro Libro

Tag Cloud

Article Categories

Archives

Post Categories

Blogs amici

Links

WPF: Style, Trigger e Multitrigger

Supponiamo di avere una Window WPF, contentente un singolo controllo TextBox. Vogliamo, senza utilizzare il code-behind, che a secondo del contenuto del TextBox, questo cambi il colore di background. Nello specifico, se nel TextBox c'è scritto "SI", il Background deve essere Verde, se c'è scritto "NO" rosso. Piccola prefazione: uno Style, è generalmente un'insieme di proprietà che applicato ad un'insieme di contenuti quali testi o immagini, ne determina l'aspetto grafico. Parlando di Style, in WPF, questo non è solo un semplice insieme di proprietà, dato che, include comportamenti specifici come la possibilità di cambiare l'aspetto di un controllo basandosi sugli eventi dell'utente, utilizzando gli event trigger. Per lo scopo del post, utilizzeremo invece dei Property Triggers, ovvero dei Trigger, che "osservano" una particolare Dependency Property per verificare se assume un certo valore. Nel caso in cui, il valore "osservato" sia quello atteso, si può impostare una qualche proprietà del  controllo Target, ad esempio il Background o il testo del ToolTip.

Aggiungiamo il codice del nostro Style personalizzato alla collezione delle risorse presenti nella Window:

1 <Style x:Key="CustomTextBoxStyle" TargetType="{x:Type TextBox}"> 2 <Style.Triggers> 3 <Trigger Property="Text" Value="SI"> 4 <Setter Property="Background" Value="Green" /> 5 <Setter Property="ToolTip" Value="Il valore SI è corretto"/> 6 </Trigger> 7 <Trigger Property="Text" Value="NO"> 8 <Setter Property="Background" Value="Red" /> 9 </Trigger> 10 </Style.Triggers> 11 </Style>

Il codice su esposto è relativamente semplice: in entrambi i trigger andiamo a monitorare la proprietà Text del controllo TextBox. Se questo assume il valore "SI" (case-sensitive), impostiamo  la proprietà Background del controllo su Green ed il testo da visualizzare con il ToolTip. Se invece Text è uguale a "NO" allora impostiamo il colore di Background su Red.

Il codice XAML della Window è il seguente:

1 [...] 2 <Grid> 3 <Grid.RowDefinitions> 4 <RowDefinition Height="117*" /> 5 <RowDefinition Height="145*" /> 6 </Grid.RowDefinitions> 7 <TextBox Margin="66,48,77,30" Name="textBox1" Style="{StaticResource CustomTextBoxStyle}" /> 8 </Grid> 9 </Window>

Supponiamo invece, di voler cambiare il valore del Background sul Giallo, quando si verificano più condizioni contemporaneamente, ad esempio quando il controllo TextBox ha il Focus e non contiene Testo. Per questo scopo utilizziamo invece un MultiTrigger:

1 <MultiTrigger> 2 <MultiTrigger.Conditions> 3 <Condition Property="Text" Value=""/> 4 <Condition Property="IsFocused" Value="True"/> 5 </MultiTrigger.Conditions> 6 <Setter Property="Background" Value="Yellow"/> 7 </MultiTrigger>

Codice XAML completo della Window WPF.

Print | posted on mercoledì 17 settembre 2008 14:15 | Filed Under [ WPF ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET