【发布时间】:2011-12-15 17:47:48
【问题描述】:
我的窗口中有图像控件。此图像控件的大小设置为“自动”。
<Image x:Name="videoImg" Stretch="Fill" Height="Auto" Width="Auto" />
当我尝试访问时,它返回 0。如何查看此控件的实际大小?它随窗口调整大小。
【问题讨论】:
标签: c# wpf wpf-controls size
我的窗口中有图像控件。此图像控件的大小设置为“自动”。
<Image x:Name="videoImg" Stretch="Fill" Height="Auto" Width="Auto" />
当我尝试访问时,它返回 0。如何查看此控件的实际大小?它随窗口调整大小。
【问题讨论】:
标签: c# wpf wpf-controls size
您可以使用.ActualHeight 和.ActualWidth 来获取一个控件的渲染Height/Width
【讨论】:
ActualHeigh 和ActualWidth 返回大小之前呈现。
.RenderSize.Height 和 .RenderSize.Width
问题是,Width 和 Height 属性可让您表达所需大小,而您想要的是渲染大小 - 可以访问(但未设置)使用 ActualWidth 和 ActualHeight 属性。
应该注意的是,这些也不是静态值,也就是说,一旦设置,它们不一定会永远相同,因为它将在每个渲染序列上重新评估......
因为 [ActualHeight / ActualWidth] 是一个计算值,您应该知道 可能有多个或增量报告的更改作为 布局系统的各种操作的结果。布局系统 可能正在计算子元素所需的度量空间, 父元素的约束,等等。
因此,根据您的要求,您可能需要考虑在适当的点重新评估您的数据,例如在包含控件调整大小时。
【讨论】:
虽然某些 WPF 控件在布局和呈现时会填满所有可用空间,但其他控件不会。 具体来说,Image 控件不是一种自行确定其大小的控件,即,在您没有使用宽度/高度属性等明确指定控件大小的情况下。
但是当缺少定义大小的属性时,Grid 控件会填满所有可用空间。 Visual Studio 中的 Page/Window 模板有一个 Grid 控件作为 Page/Window 根控件的子级,当用户开始在图形编辑器中的页面上放置控件时,用户添加的控件首先成为此 Grid 的子级控制。
如果您使用了 VS 模板,并且您的 Image 控件是上述 Grid 控件的子控件,请使用 x:Name 属性命名您的 Grid,您可以在代码中使用 Grid 的 ActualWidth/Height 属性来满足您的需要- 后面,因为图像控件会增长到其父 Grid 大小 - 前提是您未明确指定其大小或以其他方式指定其大小,即设置图像内容。
顺便说一下,内置控件的大小调整行为是可以更改的。您可以修改控件并覆盖相应的依赖项属性。例如,请参阅https://stackoverflow.com/a/6094993。
【讨论】: