获取WPF控件的当前大小

时间:2011-10-26 13:29:52

标签: c# wpf wpf-controls size

我的窗口中有图像控件。此图像控件的大小设置为“自动”。

<Image x:Name="videoImg" Stretch="Fill" Height="Auto" Width="Auto" />

当我尝试访问时,它返回0.如何查看此控件的实际大小?它用窗口调整大小。

3 个答案:

答案 0 :(得分:19)

您可以使用.ActualHeight.ActualWidth来获取控件的呈现Height / Width

答案 1 :(得分:3)

问题是,WidthHeight属性可以让您表达所需的大小,而您想要的是渲染大小 - 可以使用ActualWidthActualHeight属性访问(但不设置)。

应该注意的是,这些也不是静态值,也就是说,一旦设置它们之后就不一定会永远相同,因为它将在每个渲染序列上重新评估......

  

因为[ActualHeight / ActualWidth]是一个计算值,你应该知道   作为一个可能有多个或增量报告的变化   布局系统进行各种操作的结果。布局系统   可能正在计算子元素所需的度量空间,   父元素的约束,等等。

因此,根据您的要求,您可能需要考虑在适当的时间点重新评估您的数据,例如,当包含控件调整大小时。

答案 2 :(得分:1)

虽然一些WPF控件在布局和渲染时会填满所有可用空间,但其他控件却没有。 具体来说,Image控件不是一种单独建立其大小的类型,即,当您没有使用width / height属性等明确指定控件的大小时。

但是,当缺少大小定义属性时,Grid控件会填满所有可用空间。 Visual Studio中的页面/窗口模板将网格控件作为页面/窗口根控件的子控件,当用户开始在图形编辑器中将控件放在页面上时,用户添加的控件首先成为此网格的子控件控制。

如果您使用过VS模板,并且您的Image控件是所述Grid控件的子控件,请使用x:Name属性命名Grid,并且您可以在代码中使用Grid的ActualWidth / Height属性来满足您的需求-behind,因为图像控件增长到其父网格大小 - 如果您没有明确指定其大小或其他方式,即设置图像内容。

顺便说一句,可以更改内置控件的大小调整行为。您可以修改控件并覆盖相应的依赖项属性。例如,请参阅https://stackoverflow.com/a/6094993