Technology Experience
.NET World

Come specificare Padding e Margin

Come specificare Padding e Margin nello XAML di WPF
Ci sono molte cose che non mi entrano in testa. Per quante volte mi vengano spiegate, o per quante volte possa leggerle, non mi entrano in testa. Una di queste è il modo con cui specificare il Padding ed il Margin dei controlli WPF.

Il Padding rappresenta lo spazio interno tra il contenuto di un controllo ed i suoi bordi. Il Margin rappresenta lo spazio tra il bordo del controllo e quello che gli sta accanto. Ci sono diversi modi per specificare questo valore. Il modo più comune è quello di indicare un solo valore alla proprietà Margin o Padding, come nell’esempio qui sotto:

<Label Padding="0" Background="Orange">Cognome :</Label>

Impostare Padding = “0” significa che la distanza tra il testo “Cognome :” ed il bordo della Label stessa è pari a zero. In pratica la scritta è attaccata al bordo su tutti e quattro i lati. Proviamo ad editare a mano lo XAML in questo modo:

<Label Padding="6" Background="Orange">Cognome :</Label>

Questa volta abbiamo impostato Padding=”6″: ciò significa che ci sono 6 device-independent pixels tra la scritta ed il bordo della Label. Tale distanza è applicata in ugual misura su tutti e quattro i lati.

Fin qua le cose sono semplici. Il fatto è che possiamo specificare Padding e Margin con più di un valore, per indicare distanze diverse per i quattro lati. Mi spiego meglio. Supponiamo di avere il seguente XAML:

<Label Padding="0,10,20,30" Background="Orange">Data di Nascita :</Label>

A questa Label è stato dato un Padding=”0,10,20,30″. I valori vanno letti nell’ordine Left, Top, Right e Bottom (ed è questo quello che non mi ricordo mai). Quindi, il testo sarà appiccicato al bordo sinistro, sarà a 10 pixel dal bordo superiore, sarà a 20 pixel dal bordo destro e a 30 pixel dal bordo inferiore. La stessa logica vale ovviamente per la proprietà Margin.

C’è anche la possibilità di specificare due valori soltanto. Per esempio:

<Label Padding="30, 6" Background="Orange">Data di Nascita :</Label>

In questo caso il primo valore (30) viene usato per impostare il Padding a sinistra e a destra, mentre il secondo valore (6) viene usato per impostare il Padding per l’alto ed il basso.

Chi ci sta dietro? ThicknessConverter!
Qualcuno si chiederà come è possibile che WPF riconosca quelle stringhe e come faccia a convertirle in valori double per continuare il processo di layout dei pannelli e dei controlli. Il segreto sta nella classe ThicknessConverter, che si preoccupa di convertire dal tipo string al tipo Thickness e viceversa. Tale classe è contenuta nell’assembly PresentationFramework.dll del Framework 3.0. Mi sono divertito ad esplorarla velocemente con Reflector, e anche dal codice si deduce come faccia uso di un metodo internal FromString che tra le altre cose è soggetto alla localizzazione della nostra applicazione, dal momento che uno dei parametri in ingresso è un CultureInfo. E si vede chiaramente che a seconda del numero di valori presenti nella nostra stringa, viene utilizzato un costruttore diverso della classe Thickness.

Riassumendo: l’ordine
Cioè, quello che mi dimentico più spesso.

X = stesso valore su tutti e quattro i lati
X, Y = X per il Left ed il Right; Y sul Top ed il Bottom
X, Y, Z, K = Left, Top, Right e Bottom

Technorati Tags:  

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.