WPF中的Width和ActualWidth有什么区别?

问题描述 投票:47回答:7

[我目前正在WPF中使用Panel,并且我注意到关于WidthHeight属性,还有两个其他属性称为ActualWidthActualHeight

ActualWidth

获取此对象的渲染宽度元件。这是一个依赖属性。 (继承自FrameworkElement。)

Width

获取或设置元素的宽度。这是一个依赖属性。(继承自FrameworkElement。)

参考:MSDN

任何人都可以指出两者之间的区别以及何时使用其中之一?

wpf size width actualwidth
7个回答
70
投票

Width / Heightrequested or layout大小。如果设置为“自动”,则在后面的代码中访问属性时,该值为double.NaN

ActualWidth / ActualHeightRenderSize.Width / RenderSize.Height都返回元素的渲染大小,因为RenderSize的类型为[[Size。如果您想要/需要物品的实际尺寸,请使用以下任何属性。


9
投票
当我想将一个元素的宽度或高度绑定到另一个元素时,我发现ActualWidth最有用。

在这个简单的示例中,我并排布置了两个按钮,并在下面添加了注释,该注释被限制为包含两个按钮的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>


6
投票
ActualWidth会考虑填充值,因此,只要您需要知道该数字,就可以调用Actualwidth而不是宽度,从而避免计算。

3
投票
ActualWidth由渲染系统设置,并且可能会因其他元素的宽度和整体大小限制而有所不同。结果,无法更改。 Width是可以更改的属性,应用于增加或减小元素的宽度。

3
投票
有很好的理由

不使用ActualWidth


0
投票
就是这样,渲染宽度!=布局宽度。一个用于布局,另一个用于渲染。就像WinForms一样,有一个Size和一个ClientSize属性,两者之间略有不同,您应该使用Atual / Client的渲染尺寸和Width / Height进行布局。

0
投票
您可以设置Width属性,但不能设置ActualWidth属性。
© www.soinside.com 2019 - 2024. All rights reserved.