wpf - ContentControl + RenderTargetBitmap + 空图像

标签 wpf contentcontrol rendertargetbitmap

我试图创建一些图表图像,但从未在屏幕上显示这些图表。我已经在这方面工作了很长一段时间并尝试了很多不同的事情,但似乎没有任何效果。如果我首先在窗口中显示图表,则代码可以完美运行,但如果我不在窗口中显示它,则位图只是带有黑色边框的白色(不知道为什么)。

我曾尝试在渲染之前将图表添加到边框并为边框提供绿色边框。在位图中,我看到绿色 borderBrush 然后是黑色边框和白色背景,但没有图表。图表不包含在黑色边框中,所以我不知道它来自哪里。

我尝试将图表添加到窗口而不调用 window.Show() 并且我再次得到黑色边框和白色背景。但是,如果我调用 window.Show() 位图包含图表。

我已经尝试使用绘图可视化解释 here ,同样的结果。

这是代码(不包括将元素添加到边框或窗口):

private static BitmapSource CreateElementScreenshot(FrameworkElement element, int dpi)
{
    if (!element.IsMeasureValid)
    {
        Size size = new Size(element.Width, element.Height);
        element.Measure(size);
        element.Arrange(new Rect(size));
    }

    element.UpdateLayout();

    var scale = dpi/96.0;

    var renderTargetBitmap = new RenderTargetBitmap
        (
            (int)(scale * element.RenderSize.Width),(int)(scale * element.RenderSize.Height),dpi,dpi,PixelFormats.Default
        );

    // this is waiting for dispatcher to perform measure, arrange and render passes
    element.Dispatcher.Invoke(((Action)(() => renderTargetBitmap.Render(element))), DispatcherPriority.Render);

    return renderTargetBitmap;
}

注意:图表是一个 ContentControl。

无论如何我可以让图表呈现而不先在窗口中显示它?

最佳答案

调用 element.ApplyTemplate() 可以解决问题。

关于wpf - ContentControl + RenderTargetBitmap + 空图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2562310/

相关文章:

c# - XAML ContentControl 数据绑定(bind)不起作用

wpf - 将 WPF 控件转换为 BitmapSource

wpf - 在面板外移动带有动画的元素

WPF : Binding Order

wpf - 嵌入在 ContentControl 中的交互触发器

wpf - 是否有一些事件显示新的 ContentTemplate 已完全应用?

c# - 线程必须是 STA-Thread,但它已经是

c# - 使用 WPF 绘制家谱

c# - 将 Canvas 保存为 png C# wpf

c# - RenderTargetBitmap图像质量低的问题