在WPF中的Width和ActualWidth有什么区别?
我目前正在使用WPF中的Panel ,我注意到,关于Width和Height属性,还有两个其他属性,称为ActualWidth和ActualHeight 。 
ActualWidth获取此元素的渲染宽度。 这是一个依赖属性。 (inheritance自FrameworkElement。)
Width获取或设置元素的宽度。 这是一个依赖属性。 (inheritance自FrameworkElement。)
参考: MSDN
任何人都可以指出两者之间的差异,以及何时使用两者之一?
  Width / Height是请求的或布局的大小。 如果您设置为“自动”,则当您访问代码后面的属性时,该值为double.NaN 。 
  ActualWidth / ActualHeight是渲染大小。 如果您需要/需要项目的实际大小,请使用此属性。 
 当我想将一个元素的宽度或高度绑定到另一个元素时,我发现ActualWidth最有用。 
在这个简单的例子中,我有两个并排排列的button,下面的注释被限制为包含两个button的StackPanel的宽度。
 <StackPanel> <StackPanel Margin="0,12,0,0" Orientation="Horizontal" Name="buttonPanel" HorizontalAlignment="Left" > <Button Content="Yes - Arm the missile" FontWeight="Bold" HorizontalAlignment="Left"/> <Button Content="No - Save the world" HorizontalAlignment="Left" Margin="7,0,0,0"/> </StackPanel> <TextBlock Text="Please choose whether you want to arm the missile and kill everybody, or save the world by deactivating the missile." Width="{Binding Path=ActualWidth,ElementName=buttonPanel}" Margin="0,5,0,0" HorizontalAlignment="Left" TextWrapping="Wrap"/> </StackPanel> 
  ActualWidth帐户填充的值,所以任何时候你需要知道这个数字,你可以调用Actualwidth宽度,而不是宽度,并避免计算。 
编辑:删除保证金B / C它不是ActualWidth的一部分。
  ActualWidth由渲染系统设置,并且可能根据其他元素的宽度和整体大小约束而不同。 因此,它不能改变。  Width是可以更改的属性,应该用于增加或减less元素的宽度。 
来自MSDN :
该属性是基于其他宽度input和布局系统的计算值。 该值由布局系统本身根据实际渲染过程设置,因此可能略微落后于作为input更改基础的
Width等属性设置值。
 有一个很好的理由不使用ActualWidth绑定(显然ActualHeight相应)。 当您将一个元素的Width设置为另一个元素的ActualWidth ,您可能会破坏布局链 。 
在最好的情况下,你的元素/控件需要在父级(绑定源)的布局过程完成后进行parsing。 这意味着更多的时间。 如果它与父级处于同一层级,则布局过程需要两次(至less)计算确定的大小。
 例如我有一个控制,它的大小属性覆盖的风格,将其设置为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是有问题的。 更好地解决这个问题,而不是搞乱布局运行的最终大小。 
就是这样,渲染宽度!=布局宽度。 一个旨在用于布局另一个旨在渲染。 它与WinForms一样,有一个Size和一个ClientSize属性,稍有不同,你应该使用渲染的Atual / Client大小和布局的宽度/高度。
 您可以设置Width属性,但不是ActualWidth属性。 
  Width属性用于确定如何渲染面板,然后将ActualWidth设置为使用的实际宽度。 这可能不是宽度相同的值,具体取决于其父元素的子元素和缩进的大小。 
 在设置Width属性时, ActualWidth不会立即设置,而是在渲染过程中更新(一次或多次)。