Есть очень веская причина не использовать ActualWidth
для привязки (очевидно, ActualHeight
соответственно). Когда вы устанавливаете Width
элемента на ActualWidth
другого, вы можете разорвать цепочку макетов.
В лучшем случае ваш элемент/элемент управления необходимо проанализировать после завершения процесса макета родителя (источника привязки). Это означает дополнительное время. Если он находится на том же уровне иерархии, что и родительский, процесс компоновки требует двух прогонов (как минимум) для расчета окончательного размера.
Например, у меня был элемент управления, свойство размера которого было переопределено в стиле, который установил бы для него значение TemplatedParent
(не делать):
<Rectangle DockPanel.Dock="Top" Width="{TemplateBinding ActualWidth}"
Height="1" Fill="#000000"/>
При изменении размера содержащего окна элемент управления предотвратит уменьшение размера контейнера и нарушит макет. Установка значения Width
решит проблему (сделать):
<Rectangle DockPanel.Dock="Top" Width="{TemplateBinding Width}"
Height="1" Fill="#000000"/>
Если вам приходится использовать ActualWidth
в общем, что-то не так с вашим xaml. Лучше исправить это, чем портить окончательные размеры макета.
person
Pascal
schedule
04.10.2013