如何在WPF中运行时在代码中创建的框架“拍照”?

时间:2016-04-14 15:35:07

标签: c# wpf xaml

我有这个函数,它是从按钮Click事件处理程序调用的:

private void CreateFrame(Page page)
{
    Frame newFrame = new Frame();
    newFrame.Navigate(page);

    // FramesHolder is a StackPanel with multiple Frames inside it
    FramesHolder.Children.Add(newFrame);

    // The size the page is 525x50
    RenderTargetBitmap renderTargetBitmap =
        new RenderTargetBitmap(525, 50, 96, 96, PixelFormats.Pbgra32);
    renderTargetBitmap.Render(newFrame);
    PngBitmapEncoder pngImage = new PngBitmapEncoder(); 

    pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
    using (Stream fileStream = File.Create("Frame.png"))
    {
        pngImage.Save(fileStream);
    }
}

问题是Frame.png图像呈现黑色。怎么解决?感谢。

1 个答案:

答案 0 :(得分:1)

我将renderTargetBitmap.Render(newFrame);行更改为renderTargetBitmap.Render(page);,并成功截取屏幕截图。

问题在于创建新框架。

我显示了一个页面,在Loaded事件中,我使用上面指定的更改调用了您的方法并且它有效。

public partial class Page2 : System.Windows.Controls.Page
{
    public Page2()
    {
        InitializeComponent();
    }

    private void PG2_Loaded(object sender, RoutedEventArgs e)
    {
        CreateFrame(this);
    }

    private void CreateFrame(Page page)
    {
        Frame newFrame = new Frame();
        newFrame.Navigate(page);

        // The size the page is 525x50
        RenderTargetBitmap renderTargetBitmap =
            new RenderTargetBitmap(525, 50, 96, 96, PixelFormats.Pbgra32);
        renderTargetBitmap.Render(page);
        PngBitmapEncoder pngImage = new PngBitmapEncoder();

        pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
        using (Stream fileStream = File.Create("c:\\Frame.png"))
        {
            pngImage.Save(fileStream);

        }
    }

}