В чем разница между Width и ActualWidth в WPF?

В настоящее время я работаю с Panel s в WPF, и я заметил, что в отношении свойств Width и Height есть еще два свойства, называемые ActualWidth и ActualHeight .

ActualWidth

Получает визуализированную ширину этого элемента. Это свойство зависимостей. (Унаследовано от FrameworkElement.)

Width

Получает или задает ширину элемента. Это свойство зависимостей. (Унаследовано от FrameworkElement.)

Ссылка: MSDN

Может ли кто-нибудь указать различия между ними и когда использовать один?

Width / Height – это запрошенный или размер макета . Если вы установите значение «Авто», значение будет double.NaN когда вы получите доступ к свойству в коде позади.

ActualWidth / ActualHeight – это размер. Если вам нужен / нужен фактический размер элемента, используйте этот атрибут.

Я считаю, что ActualWidth наиболее полезен, когда я хочу привязать ширину или высоту одного элемента к другому.

В этом простом примере у меня есть две кнопки, расположенные бок о бок, и комментарий под ним, который ограничен шириной StackPanel, содержащей две кнопки.

        

ActualWidth учитывает отступы в значении, поэтому в любое время вам нужно знать этот номер, который вы можете назвать Actualwidth вместо ширины и избежать вычисления.

edit: удалена. Маржа b / c не является частью ActualWidth.

ActualWidth устанавливается системой рендеринга и может отличаться в зависимости от ширины других элементов и ограничений общего размера. В результате его нельзя изменить. Width – это свойство, которое может быть изменено и должно использоваться для увеличения или уменьшения ширины элемента.

Из MSDN :

Это свойство представляет собой рассчитанное значение, основанное на других входах ширины и системе компоновки. Значение устанавливается самой системой компоновки, основанной на фактическом проходе рендеринга, и поэтому может немного отставать от установленного значения свойств, таких как Width которые являются основой изменения ввода.

Существует очень веская причина не использовать ActualWidth для привязки (очевидно, ActualHeight соответственно). Когда вы устанавливаете Width элемента, в ActualWidth другого, вы можете сломать цепочку макета .

В лучшем случае ваш элемент / элемент управления необходимо проанализировать после завершения процесса компоновки родителя (источника привязки). Это означает дополнительное время. Если он находится на том же уровне иерархии, что и родительский, для процесса компоновки требуется два прогона (по крайней мере) для вычисления окончательного размера.

Например, у меня был элемент управления, у которого было свойство размера, переопределенное в стиле, который установил бы его в TemplatedParent (не делать) :

  

При изменении размера windows, содержащегося в окне, управление предотвратит уменьшение размера контейнера и торможение компоновки. Установка его в Width решит проблему (do) :

  

Если вам нужно использовать ActualWidth в общем, что-то не так с вашим xaml. Лучше исправить это, а не испортить окончательные размеры макета.

Это точно, ширина визуализации! = Ширина макета. Один из них предназначен для компоновки, другой предназначен для рендеринга. Как и в случае с WinForms, существовало свойство Size и ClientSize, они немного отличаются, и вы должны использовать размер рендеринга Atual / Client и ширину / высоту для макета.

Вы можете установить свойство Width , но не свойство ActualWidth .

Свойство Width используется для определения того, как отображается панель, тогда ActualWidth устанавливается на фактическую ширину, которая была использована. Это может быть не такое же значение, как ширина, в зависимости от размера его дочерних элементов и сужений от его родительского элемента.

ActualWidth не устанавливается сразу при настройке свойства Width , но будет обновляться (один или несколько раз) во время рендеринга.

  • Ширина столбца CView ListView Auto
  • Почему ActualWidth и ActualHeight 0.0 в этом случае?
  • Каково максимальное значение пикселя для свойств ширины и высоты CSS?
  • Как получить размер NSString
  • Можно ли использовать jQuery для получения ширины элемента в процентах или пикселях в зависимости от того, что разработчик указал с помощью CSS?
  • Как получить ширину и высоту файла android.widget.ImageView?
  • Давайте будем гением компьютера.