我的窗口中有图像控件。此图像控件的大小设置为“自动”。
<Image x:Name="videoImg" Stretch="Fill" Height="Auto" Width="Auto" />
当我尝试访问时,它返回0.如何查看此控件的实际大小?它用窗口调整大小。
答案 0 :(得分:19)
您可以使用.ActualHeight
和.ActualWidth
来获取控件的呈现Height
/ Width
答案 1 :(得分:3)
问题是,Width
和Height
属性可以让您表达所需的大小,而您想要的是渲染大小 - 可以使用ActualWidth
和ActualHeight
属性访问(但不设置)。
应该注意的是,这些也不是静态值,也就是说,一旦设置它们之后就不一定会永远相同,因为它将在每个渲染序列上重新评估......
因为[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。