RenderTargetBitmap不尊重ColumnDefinitions宽度

时间:2011-11-08 18:34:14

标签: c# wpf visualbrush rendertargetbitmap

我需要使用一些隐藏列创建Grid的快照(通过设置它的ColumnDefinition.Width = 0)。

在屏幕上看起来不错,但created image所有列都可见(does not respect the ColumnDefinitions)。因为RenderTargetBitmap正在查看不存在这些更改的不同图层(可视图层与布局图层),因此我在某处更红。 有没有机会用正确的ColumnDefinitions获得网格的真实快照?我不能简单地使用Rectagnel.Fill = VisualBrush,因为我需要在循环中存储这些图像(每次迭代=新图像)。 / p>

我试过像this snippet

这样的方法

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

在创建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;
}