Eccoci qui al 13° workshop di DotNetMarche su WPF. A Paolo il compito di illustrarci la differenza tra Windows Form e WPF. Cosa hanno in comune Windows Form e WPF? Niente:
- Nuovo linguaggio di programmazione per lo sviluppo della grafica (XAML)
- Nuovo modello ad oggetti per rappresentare la UI
- nuovo modello di propagazione degli eventi
- Nuovo modello di gestione dei comandi
- Nuovo modello di binding
- Grafica vettoriale
Attraverso l’uso di XAML possiamo dichiarare oggetti e creare oggetti, sottoscrivere eventi, impostare proprietà e manipolare dati. Per la generazione dello xaml è possibile usare visual studio oppure blend, il primo più orientato ai programmatori, il secondo più orientato ai grafici. Andrea ci mostra come creare una semplice applicazione con un pulsante da Visual Studio e poi come cambiarne l’aspetto grafico attraverso l’uso di expression blend.
I controlli più usati in WPF sono sicuramente i contenitori, con i quali possiamo impostare varie forme di layout, come quello tabellare, nel quale possiamo poi trascinare i controlli dell’interfaccia che si adatteranno alla finestra in base al tipo di controllo che abbiamo deciso di usare.
Quando costruisco interfacce grafiche in WPF la logica del controllo (un pulsante fa il pulsante) è separata dalla sua visualizzazione. A questo scopo vengono creati un logical tree e un visual tree, il primo è l’albero dei controlli che sono presenti nell’interfaccia, il secondo invece è l’albero contenente la rappresentazione grafica dei controlli presenti nell’interfaccia. Grazie a questo meccanismo posso cambiare totalmente l’aspetto grafico di un controllo senza alterarne il funzionamento.
Passando al motore di binding di WPF, è possibile ad esempio bindare i valori dei controlli tra di loro, ad esempio uno slider e una textblock mostrando nella textblock il valore corrente dello slider. Questo in maniera completamente dichiarativa attraverso l’uso di XAML:
Text = {Binding Value, ElementName=slider, Mode=Default}
Ci sono 4 modalità di binding:
-
Bidirezionale
-
OneWay dalla sorgente alla View
-
OneWaytoSource dalla view alla sorgente dati
-
OneTime, una sola volta dalla sorgente alla view
Ma il tempo è tiranno, le cose da dire sarebbero tante, sicuramente abbiamo solo scalfito la superficie.