C'è una buona ragione non utilizzare il ActualWidth
a legarsi a (ovviamente ActualHeight
di conseguenza). Quando si imposta Width
di un elemento, su ActualWidth
di un altro è possibile che interrompa la catena di layout.
Nel migliore dei casi l'elemento/controllo deve essere analizzato dopo il processo di layout del genitore (l'origine di associazione) terminato. Ciò significa più tempo. Se si trova allo stesso livello gerarchico del genitore, il processo di layout richiede due esecuzioni (almeno) per calcolare una dimensione definitiva.
Per esempio ho avuto un controllo che ha avuto è proprietà size sovrascritto in uno stile che vorrebbe mettere al TemplatedParent
(non farlo):
<Rectangle DockPanel.Dock="Top" Width="{TemplateBinding ActualWidth}"
Height="1" Fill="#000000"/>
Quando il ridimensionamento della finestra che contiene, il controllo impedirebbe al contenitore di diventare più piccolo e frenare il layout. Impostazione al Width
risolverà il problema (fare):
<Rectangle DockPanel.Dock="Top" Width="{TemplateBinding Width}"
Height="1" Fill="#000000"/>
Se si deve usare il ActualWidth
in qualcosa di generale, è sbagliato con il vostro XAML. Meglio aggiustarlo invece di fare confusione con le dimensioni finali dell'esecuzione del layout.
In realtà la dimensione del layout non è la dimensione del rendering. – chuckj
@chuckj, quale attributo si userebbe per ottenere le dimensioni del rendering? – dumbledad
@dumbledad '.RenderSize.Width' – Mafii