Panoramica sui controlli
Nello sviluppo di applicazioni è molto probabile trovarsi di fronte ad elenchi di informazioni provenienti da Database, file XML o altre sorgenti. Queste liste possono poi ricevere input dall'utente, variare il loro aspetto ed essere selezionabili. In WPF sono presenti controlli che raccolgono queste caratteristiche e che probabilmente sono già conosciute per chi proviene dal mondo WinForms. Si può dire che questi controlli sfruttano appieno le funzionalità di WPF come Dependency Property, Attached Property, Eventi, Binding, Template e CollectionView, e in questo articolo si vuole dare una panoramica di esse così da essere consapevoli della scelta che si fa quando si utilizza un controllo piuttosto che un altro.
Un concetto nuovo e fondamentale da capire, è che in WPF per tutti i controlli vanno distinti la logica dalla loro rappresentazione. In pratica alcune classi forniscono e modificano certe informazioni di stato, eventi, o proprietà, ma non gestiscono assolutamente il loro aspetto grafico. E' il template e lo style ad essi associati che apportano un aspetto e reagiscono in funzione delle informazioni esposte dal controllo.
Questo significa che un controllo va scelto per ciò che fa e non per come si vede; difficilmente si dovrà ricorrere a classi personalizzate se non in mancanza di certe informazioni o logiche. Eventualmente è poi possibile ridefinirne il suo aspetto con gli strumenti di WPF.
Il modello oggetti di WPF è coerente a questo sistema e dispone di una classe base ItemsControl che include le funzionalità minime per fornire un elenco di informazioni. Ecco le classi messe a disposizione:
- ItemsControl
- MenuBase
- ContextMenu
- Menu
- Selector
- ComboBox
- ListBox
- TabControl
- StatusBar
- TreeView
- HeaderedItemsControl
- MenuItem
- ToolBar
- TreeViewItem
- MenuBase
L'articolo ha l'intento di mostrare le caratteristiche di questi controlli. Alcuni verranno trascurati poiché il loro utilizzo è identico ad altri e si differenziano solo nell'aspetto. Per il proseguo della lettura si consideri come sorgente dati di esempio il seguente XML:
<items> <item text="Testo 1" value="1"> <item text="SubTesto 1" value="1-1" /> <item text="SubTesto 2" value="1-2" /> <item text="SubTesto 3" value="1-3" /> </item> <item text="Testo 2" value="2"> <item text="SubTesto 1" value="2-1" /> <item text="SubTesto 2" value="2-2" /> </item> <item text="Testo 3" value="3"> <item text="SubTesto 1" value="3-1" /> <item text="SubTesto 2" value="3-2" /> <item text="SubTesto 3" value="3-3" /> </item> <item text="Testo 4" value="4" /> </items>
I dati sono poi referenziati nelle risorse della finestra e impostati come DataContext:
<Window> <Window.Resources> <XmlDataProvider x:Key="xmlData" Source="Data.xml" XPath="/items" /> </Window.Resources> <Grid DataContext="{Binding Source={StaticResource xmlData},XPath=item}"> ...
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.