TreeListView con WPF

Continua la mia avventura con WPF e devo dire che ogni giorno mi accorgo di quanto non conosco ancora. Spero di vedere il fondo del barile prima o poi :-).

Nel mio progetto segreto ho avuto la necessità di avere un TreeView che caricasse una struttura ad albero, ma che mostrasse anche più colonne come il ListView. In WPF non c'è un controllo simile perciò ne ho creato uno. Nel SDK è presente un esempio di come farlo, ma è molto incompleto e poco comodo da utilizzare.

La base del controllo è un TreeView denominato per l'occasione TreeViewList composto da un albero di TreeViewListItem. Uno dei punti forti di WPF è che soddisfare queste esigenze particolari è molto semplice sfruttando lo styling degli elementi. Il codice infatti è molto poco. Definite le classi e sovrascritto il DefaultStyleKey ho dovuto specializzare la classe GridViewRowPresenter. Quest'ultimo è una specie di Panel ma non lo è :-) Il bello di WPF è che non si è vincolati da niente, se si vuole si può riscrivere tutto da capo. GridViewRowPresenter posiziona il contenuto di ogni colonna in ogni riga. Ho dovuto solo modificarla per permettermi di inserire il ToggleButton per espandere o chiudere l'albero.

L'utilizzo finale è piuttosto banale:

<r:TreeListView ItemsSource="{Binding Source={StaticResource data},XPath=/opml/body/outline/outline}" ItemTemplate="{StaticResource dt}"> 
  <r:TreeListView.Columns> 
    <GridViewColumn Header="Text" DisplayMemberBinding="{Binding XPath=@text}" Width="150" /> 
    <GridViewColumn Header="Count" DisplayMemberBinding="{Binding XPath=@count}" Width="100" /> 
  </r:TreeListView.Columns> 
</r:TreeListView>

E questo è il risultato:

TreeListView con WPF

Il controllo supporta template, binding, scrolling e e i themes classic, luna e aero. Presto lo metterò nel lab completo di sorgenti.

La cosa più bella è che ho fatto tutto da XAML. Una volta preparate le classi giuste ho potuto prepare tutti e tre i temi semplicemente rubando un po' di XAML del TreeView e un po' di XAML del ListView. Per rubarlo ho usato StylesExplorer oppure se avete Blend installato andate in C:\Program Files (x86)\Microsoft Expression\Blend Beta 1\SystemThemes e troverete tutti gli styles XAML originali.

Commenti

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.



Segnala su: Facebook MSDN Social Twitter Segnalo Wikio Diggita Technorati Stumbleupon Google Yahoo FriendFeed Delicious Furl

Nella stessa categoria
I più letti del mese
TagCloud
.NET Framework, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5, .NET Framework 4.0, ADO.NET Entity Framework, AJAX, Architettura, ASP, ASP.NET, ASP.NET 2.0, ASP.NET 2.0 per tutti, ASP.NET 4.0, ASPItalia.com, Custom Control, Databinding, Datagrid, HttpRuntime, IIS, Javascript, LINQ, LINQ to Entities, LINQ to SQL, Media Center, Microsoft Expression, Object Oriented Programming, Off Topic, PDC 2008, Silverlight, Silverlight - animazioni, Silverlight 2.0, Silverlight 3.0, User Control, Visual Studio, Windows 7, Windows CardSpace, Windows Client, Windows Communication Foundation, Windows Live Services, Windows Presentation Foundation, Windows Server, Windows Vista, Windows Workflow Foundation, XAML, XBox 360, XHTML, XML, XPS, XSLT
BLOG INFO
  • 199 post, 86 commenti, 42 trackback
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom
IN EVIDENZA