Technology Experience
.NET World

StatusBar gestita con la proprietà .Tag dei controlli sulla Window

Questa volta vi rimando direttamente al post del mio (nostro) amico Corrado, che è stato così gentile e paziente da sopportarmi sul Messenger per aiutarmi a venire a capo del (piccolo) problema che avevo. 🙂

Supponiamo di avere una Window con un certo numero di controlli (TextBox in primo luogo, ma non solo). Supponiamo di avere anche una StatusBar, con cui vogliamo dare alcuni tip all’utente che sta usando l’applicazione stessa. L’obiettivo era quello di mostrare sulla StatusBar un tip diverso a seconda della TextBox che ha il focus in quel momento. Dopo aver litigato con XAML per mezza giornata e ieri sera, il buon Corrado ha regalato la soluzione che ho linkato prima.

Solo alcune precisazioni. Riporto il codice dell’evento OnGotFocus:

private void OnGotFocus (object sender, RoutedEventArgs e) { sbi.Content = (sender as TextBox).Tag.ToString(); }

Questo event-handler è agganciato tramite stile al RoutedEvent GotFocus di tutte le TextBox sulla Window. Come dice giustamente Corrado, il testo da visualizzare nella StatusBar viene prelevato direttamente dalla proprietà Tag della TextBox, che nella fattispecie è il sender dell’evento. C’è un primo minuscolo problema: se nello XAML la proprietà Tag non viene impostata, essa vale null, per cui il codice qui sopra bomberebbe con una bella Exception! Nulla di che: lo si sistema con una if veloce. C’è anche un secondo problema: vorrei poter impostare la proprietà Tag anche su controlli diversi dalla TextBox ed ottenere lo stesso effetto sulla StatusBar. Nel codice qui sopra il cast bomberebbe: l’ideale è fare il cast verso Control, che espone Tag ed è “polimorfica” rispetto a tutti (?) i controlli su una Window.
Il codice riportato qui sopra è stato corretto come segue:

private void OnGotFocus(object sender, RoutedEventArgs e) { object tip = (sender as Control).Tag; if (tip != null) barra.Content = tip.ToString(); else barra.Content = string.Empty; }

Questo funziona a meraviglia. Ovviamente è necessario associare l’EventSetter anche sullo stile dedicato, per esempio, alle ComboBox:

<Style TargetType="{x:Type ComboBox}"> <Setter Property="Margin" Value="4" /> <Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="FontSize" Value="12" /> <EventSetter Event="GotFocus" Handler="OnGotFocus" /> </Style>

Finito! Adesso posso impostare il Tag su TextBox e ComboBox e la StatusBar mostra un piccolo tip sotto forma di stringa, che aiuta l’utente e gli dice cosa deve inserire in ogni campo.

Technorati Tags:   

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.