【发布时间】:2012-03-02 08:37:23
【问题描述】:
我正在尝试截取必须显示多行的数据网格的屏幕截图。所以有一个滚动查看器。 因此,当我只是将数据网格放入 RenderTargetBitmap 的渲染方法中时,我显然只是得到了数据网格的可查看部分。 我读到可以在实际呈现该控件的 ScrollViewer 的 ItemsPresenter 时截取内容的屏幕截图,因为 ItemsPresenter 将具有内容的“真实”宽度和高度。
不幸的是,我的 ScrollViewer 与 dataGrid 没有任何不同的高度、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);
}
【问题讨论】:
-
DataGrid 控件仅呈现可见的内容,作为一种优化,因此没有什么可看的了——您可以使用WPF Inspector 之类的东西自己查看,以查看 DataGrid 的可视化树。在将 DataGrid 用作视觉对象之前,您需要让 DataGrid 相信它有足够的空间。
标签: wpf datagrid screenshot rendertargetbitmap