我在 WindowsFormsHost 中有一组控件,我想捕获当前 View 并将其保存为图像,但是我只能在图像中看到一些 Panel

是否可以将 WindowsFormsHost 用作“Visual”并捕获包装的控件?

看我的例子:

<WindowsFormsHost x:Name="windowHost">
    <wf:Panel Dock="Fill" x:Name="basePanel"/>
</WindowsFormsHost>

如果我要向 basePanel 添加一个 Button 或其他任何内容,则在使用以下代码导出到 PNG 时将不可见:
 RenderTargetBitmap rtb = new RenderTargetBitmap(basePanel.Width,
                                 basePanel.Height, 96, 96, PixelFormats.Pbgra32);
 rtb.Render(windowHost);

 PngBitmapEncoder pnge = new PngBitmapEncoder();
 pnge.Frames.Add(BitmapFrame.Create(rtb));
 Stream stream = File.Create("test.jpg");

 pnge.Save(stream);

 stream.Close();

关于为什么这可能不起作用的建议以及可能的解决方法?我想这不是真的应该以这种方式工作,但人们真的可以希望!

最佳答案

Windows 窗体控件也知道如何呈现自身,您不必跳过屏幕捕获环。让它看起来像这样:

    using (var bmp = new System.Drawing.Bitmap(basePanel.Width, basePanel.Height)) {
        basePanel.DrawToBitmap(bmp, new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height));
        bmp.Save(@"c:\temp\test.png");
    }

关于c# - 在 WindowsFormsHost 上使用 RenderTargetBitmap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1756954/

10-08 21:53