Layout
Il layout è uno degli aspetti più importanti ed innovativi che possiamo trovare in WPF.
La disposizione del controlli in un’applicazione Windows Forms avviene tramite l’impostazione delle coordinate
fisiche di posizionamento del controllo stesso all’interno della finestra o di un controllo contenitore.
Questo modo di disporre gli oggetti è troppo rigido e non consente quasi mai un ridimensionamento efficace dell’interfaccia
grafica per adattarsi alle differenti risoluzioni grafiche disponibili sul mercato.
La filosofia che sta dietro il layout in WPF, invece, è completamente differente e si basa sul medesimo concetto
di layout che troviamo nel mondo web,
cioè un layout di tipo flow, che non deve dipendere dalle coordinate fisiche.
I cardini alla base del layout in WPF sono i seguenti:
- Gli elementi dell’interfaccia non debbono avere una dimensione stabilita ma debbono riempire tutto lo spazio a loro disposizione (il contenitore);
- Gli elementi dell’interfaccia non debbono essere posizionati indicando le loro coordinate fisiche;
- Gli oggetti contenitori condividono il proprio spazio a disposizione tra tutti i controlli figli;
- Gli oggetti contenitori possono essere inseriti uno dentro l’altro.
Il processo di disposizione dei controlli in un contenitore WPF si suddivide in due fasi:
- Fase di misurazione : in questa fase, il contenitore itera sui suoi figli (oggetti in esso contenuti) richiedendo, ad ognuno
di essi, la dimensione “preferita” (cioè la dimensione che il controllo assumerebbe, a causa del proprio contenuto, se
non ci fossero impedimenti);
- Fase di posizionamento : in questa fase il contenitore, in base alla propria dimensione e ai dati ricavati
nella precedente fase, posiziona correttamente gli oggetti in esso contenuti.
Tutti i controlli contenitori in WPF derivano dalla classe astratta Panel contenuta nel namespace System.Windows.Controls. La gerarchia delle classi è la seguente:
ZOOM..
nei prossimi paragrafi analizzeremo, in dettaglio i singoli contenitori messi a disposizione dal framework WPF.