RenderTargetBitmap 不尊重 ColumnDefinitions 宽度

发布于 2024-12-14 21:46:58 字数 446 浏览 2 评论 0原文

我需要创建带有一些隐藏列的网格快照(通过设置它的 ColumnDefinition.Width = 0)。

在屏幕上看起来不错,但创建的图像具有所有可见的列(不尊重ColumnDefinitions)。我在某处发红,这是因为 RenderTargetBitmap 正在查看不存在这些更改的不同层(视觉层与布局层)。 是否有机会使用正确的 ColumnDefinitions 获得网格的真实快照? 我不能简单地使用 Rectagnel.Fill = VisualBrush,因为我需要循环存储这些图像(每次迭代 = 新图像)。

我尝试了类似的方法 这个片段

I need to create snapshot of Grid with some hidden columns (by setting it's ColumnDefinition.Width = 0).

On screen it looks fine, but the created image has all columns visible (does not respect the ColumnDefinitions). I red somewhere that it is because the RenderTargetBitmap is looking at different layer where these changes aren't present (Visual layer vs. Layout layer). Is there any chance to get realistic snapshot of the grid with correct ColumnDefinitions? I cannot simply use Rectagnel.Fill = VisualBrush, because I need to store these images in cycle (every iteration = new image).

I tried ways like this snippet

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

毁我热情 2024-12-21 21:46:58

需要在每个快照之前强制 UpdateLayout()。我在周期中更改了尺寸,布局更新得太晚了。

It was needed to force UpdateLayout() before each snapshot. I changed the sizes in cycle and layout was updated too late.

等风也等你 2024-12-21 21:46:58

在创建 UIElement 的快照之前调用此方法:

public static UIElement GetMeasuredAndArrangedVisual(UIElement visual)
{
    visual.Measure(new Size
    {
        Height = double.PositiveInfinity,
        Width = double.PositiveInfinity
    });

    visual.Arrange(new Rect(0, 0, visual.DesiredSize.Width, visual.DesiredSize.Height));

    visual.UpdateLayout();

    return visual;
}

Call this method before you create a snapshot of an UIElement:

public static UIElement GetMeasuredAndArrangedVisual(UIElement visual)
{
    visual.Measure(new Size
    {
        Height = double.PositiveInfinity,
        Width = double.PositiveInfinity
    });

    visual.Arrange(new Rect(0, 0, visual.DesiredSize.Width, visual.DesiredSize.Height));

    visual.UpdateLayout();

    return visual;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文