In XAML di WPF, possiamo dire a un elemento di riempire il suo contenitore in questo modo:
<Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
Perché quando impostiamo un elemento su Stretch, lo facciamo tramite le proprietà HorizontalAlignment e VerticalAlignment? Perché il team di progettazione WPF ha deciso di adottare questo approccio per avere Width="Stretch"
e Height="Stretch"
? Presumo che sia stata una decisione calcolata, e sono curioso del ragionamento.
I CSS, tra le altre tecnologie, seguono la convenzione secondo cui lo stretching viene eseguito tramite le proprietà width e height e quell'allineamento influisce sul posizionamento esclusivamente . Questo sembra abbastanza intuitivo: allungare l'elemento sta manipolando la sua larghezza e altezza, dopo tutto! Usare la corrispondente proprietà di allineamento per allungare un elemento sembra controintuitivo e insolito in confronto. Questo mi fa pensare che non hanno scelto questa opzione senza motivo: hanno preso una decisione calcolata e hanno avuto delle motivazioni.
Larghezza e Altezza usano il doppio tipo di dati, che normalmente significherebbe assegnargli una stringa sarebbe sciocco. Tuttavia, gli oggetti Window di WPF possono assumere Width="Auto"
, che viene trattato come double.NaN
. Impossibile Width="Stretch"
essere memorizzato come double.PositiveInfinity
o qualche altro valore?