【问题标题】:Getting current size of WPF controls获取 WPF 控件的当前大小
【发布时间】:2011-12-15 17:47:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# wpf wpf-controls size


    【解决方案1】:

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

    【讨论】:

    • @TimurMustafaev 您如何尝试获取这些值?通过后面的代码?通过绑定?您何时尝试获取这些值?控件必须在ActualHeighActualWidth 返回大小之前呈现。
    • 我从我的主窗口调用新表单。在这个新表单上有几个控件,其中一个是 Image。加载窗口后,我尝试获取如下大小:_imageControl.ActualWidth 或 _imageControl.ActualHeigh
    • @TimurMustafaev 如果图像可见(不可见对象没有渲染大小),这应该可以工作。测试在 Button Click 事件中获取这些值,以确保图像已完成渲染。您可以查看的另一组值是 .RenderSize.Height.RenderSize.Width
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      虽然某些 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-28
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多