截取WPF控件在Win8中无法正常工作

时间:2014-09-22 03:11:31

标签: wpf windows-8 controls

我有一个捕获WPF控件截图的功能:

    public System.Drawing.Bitmap CaptureScreenshot()
    {
        Point p = this.PointToScreen(new Point(0, 0));
        System.Drawing.Rectangle rc = new System.Drawing.Rectangle((int)p.X, (int)p.Y, (int)this.ActualWidth, (int)this.ActualHeight);
        System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(rc.Width, rc.Height);
        using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))
        {
            g.CopyFromScreen(rc.Location, System.Drawing.Point.Empty, rc.Size);
        }
        return bitmap;
    }

这在Win7中运行良好。但是,在Win8中,如果从上下文菜单调用此函数,则捕获的屏幕截图也会显示上下文菜单。它不会等待我的上下文菜单在截取屏幕截图之前消失。

为什么它在Win7中工作但不在Win8中工作?在拍摄截图之前,我如何等到上下文菜单消失?我试过了DoEventsUpdateLayout()等几件事,但他们似乎没有帮助。

更新: 按照pushpraj的评论,我使用RenderTargetBitmap工作:

        var bitmap = new RenderTargetBitmap((int)grid.ActualWidth, (int)grid.ActualHeight, 96, 96, PixelFormats.Default);
        bitmap.Render(grid);
        Clipboard.SetImage(bitmap);

除了一个问题外似乎有效。我的控件有一个浅色背景,当我粘贴剪贴板时会变成全黑。如果我将位图直接保存到文件中,我就不会遇到这个问题。怎么了?

更新2: 好的,对于使用RenderTargetBitmap的背景问题,我在here找到了修复程序。

0 个答案:

没有答案