使用scrollviewer获取WPF数据网格的屏幕截图

时间:2012-03-02 08:37:23

标签: wpf datagrid screenshot rendertargetbitmap

我正在尝试获取数据网格的屏幕截图,该数据网格必须显示多行。所以有一个滚动查看器。 因此,当我将datagrid放入RenderTargetBitmap的Render方法时,我显然只是得到了datagrid的可视部分。 我读到,当实际呈现该控件的ScrollViewer的ItemsPresenter时,可以截取内容的屏幕截图,因为ItemsPresenter将具有内容的“真实”宽度和高度。

不幸的是,我的ScrollViewer与dataGrid没有任何不同的Height,ActualHeight或RenderSize.Height。 所以我总是得到内容的可见部分。

任何人都知道如何以正确的方式做到这一点,它实际上需要整个内容吗?

代码:

        var scroll = GetTemplateChildByName(dataGridInOut);
        if (scroll != null)
        {
            var item = scroll.Content as ItemsPresenter;
            var width = item.RenderSize.Width;
            var height = item.RenderSize.Height;
            var rtb = new RenderTargetBitmap((int) Math.Round(width), (int)Math.Round(height), 96, 96,
                                             PixelFormats.Pbgra32);
            var drawingVisual = new DrawingVisual();
            var visualBrush = new VisualBrush(item);
            using (var context = drawingVisual.RenderOpen())
            {
                context.DrawRectangle(visualBrush, null, new Rect(new Point(0,0), new Size(width, height)));
            }
            rtb.Render(drawingVisual);
            Clipboard.SetImage(rtb);
        }

1 个答案:

答案 0 :(得分:0)

叶是对的。您可以以编程方式实例化另一个绑定到同一源的DataGrid,将其放入一个容器中,该容器为其提供无限空间,等待它呈现,然后截取此屏幕截图。无需在UI中实际显示它。