获取 WPF 控件当前大小

12

我在窗口中有一个图像控件,这个图像控件的大小设置为"自动"。

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

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

3个回答

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

@TimurMustafaev 你是通过代码后台获取值吗?还是通过绑定方式?并且你是在什么时候尝试获取这些值的?控件必须在渲染之后,ActualHeightActualWidth才会返回大小。 - Rachel
我从我的MainWindow调用新表单。在这个新表单上有几个控件,其中之一是图像。窗口加载后,我尝试像这样获取大小:_imageControl.ActualWidth或_imageControl.ActualHeight。 - Timur Mustafaev
@TimurMustafaev 如果图像可见,则应该可以工作(不可见对象没有渲染大小)。在按钮单击事件中测试获取这些值,以确保图像已完成渲染。您还可以查看的另一组值是“.RenderSize.Height”和“.RenderSize.Width”。 - Rachel

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

应该注意的是,这些值也不是静态的,也就是说,一旦设置,它们不一定会永远保持相同,因为每次渲染序列时都会重新评估它...

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

因此,根据您的要求,您可能希望在适当的时候重新评估您的数据,例如当包含控件调整大小时。


1
一些WPF控件在布局和渲染时会填满所有可用空间,而其他控件则不会。 具体来说,Image控件不属于自行确定大小的控件类型,即在您未明确使用width/height属性或类似属性指定控件大小的情况下。
但是,当缺少大小定义属性时,Grid控件会填充所有可用空间。Visual Studio中的Page/Window模板将Grid控件作为Page/Window根控件的子级,当用户在图形编辑器中在页面上放置控件时,用户添加的控件首先成为此Grid控件的子级。
如果您使用了VS模板,并且您的Image控件是所述Grid控件的子级,请使用x:Name属性命名您的Grid,您可以在代码后台中使用Grid的ActualWidth/Height属性来满足您的需求,因为图片控件会增长到其父Grid的大小-前提是您未明确或以其他方式设置图像内容。
顺便说一下,内置控件的大小调整行为可以更改。您可以修改控件并覆盖相应的依赖属性。例如,请参见https://dev59.com/okjSa4cB1Zd3GeqPKP-Y#6094993

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接