获取WPF控件的当前大小

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

 

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

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

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

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

由于[ActualHeight / ActualWidth]是计算值,因此您应该知道,由于布局系统的各种操作,可能会有多个或增量报告的更改。 布局系统可以计算子元素所需的度量空间,父元素的约束等等。

因此,根据您的要求,您可能需要考虑在适当的位置重新评估数据,例如,在包含控件resize时。

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

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

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

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