Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Ma...scusate...cos'è se non una semplice ListBox?

Le potenzialità di WPF sono sorprendenti. Ci stavo ragionando oggi, riguardando un attimo il mio VivendoByteEmoticons, il plug-in per Windows Live Writer. Stavo ripensando a come poter ottimizzare determinati aspetti, in termini di consumo di memoria, velocità di esecuzione e quant'altro. Immaginate il seguente scenario:

Immaginate un container di qualche tipo, che contiene un certo numero di child elencati al suo interno.
Immaginate che l'utente possa selezionare uno solo dei child.

Questo è concettualmente quello che accade adesso nel mio plug-in. Il container è un WrapPanel, mentre i child sono un insieme di FolderButton ed EmoticonButton a seconda di quello che mi serve. Lo scenario di cui sopra però può essere ricondotto ad una banale ListBox, che non è nient'altro che un container che può contenere quello che vogliamo. Grazie alle caratteristiche di WPF, possiamo forzare la ListBox a disegnare il proprio interno con un Panel che vogliamo noi. Dobbiamo in altre parole separare i due concetti di come un controllo viene disegnato e quali funzionalità applicative espone.
Stavo quindi lavorando su questo aspetto.

Il pannello che adesso contiene le emoticons, come ho appena detto, è una semplice ListBox, alla quale è stato ridefinito il Panel:

<ListBox Grid.Column="0" Grid.Row="1" Name="MainPanel"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Columns="4"/> </ItemsPanelTemplate> </ListBox.ItemsPanel> </ListBox>

L'interno della ListBox non è più il classico al quale siamo abituati a pensare, ma un oggetto UniformGrid con 4 colonne di uguale larghezza. Siccome non abbiamo più a che fare con un WrapPanel, non possiamo più scegliere (per adesso) le dimensioni di ogni EmoticonButton, ma probabilmente ci lavorerò in seguito. Ho dovuto comunque cambiare anche il codice, perchè qualsiasi classe derivata da Panel espone una proprietà Children, mentre qui per aggiungere oggetti deve accedere alla proprietà Items: poco male.

Il grande vantaggio di tutto questo è che potrò sfruttare il data-binding di WPF per riempire la ListBox, senza più passare codice C#. Giocando con la proprietà ItemsSource posso assegnare alla ListBox una collection da visualizzare, e lavorando sulla proprietà ItemPanel posso andare a specificare come deve essere disegnato ogni oggetto ListBoxItem. Ci sto ancora lavorando, data la poca esperienza di WPF qualche problema ce l'ho, vedrò comunque di tenervi aggiornati quando raggiungo risultati soddisfacenti.

Print | posted on venerdì 9 marzo 2007 19:14 | Filed Under [ Sviluppo .NET ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET