Я пытаюсь сделать снимок экрана с datagrid, который должен отображаться многими строками. Итак, есть scrollviewer. Итак, когда я просто помещаю datagrid в метод RenderTypeBender, я просто получаю видимую часть datagrid. Я прочитал, что можно сделать снимок экрана, когда на самом деле рендеринг ItemsPresenter ScrollViewer этого элемента управления, поскольку у ItemsPresenter будет «реальная» ширина и высота содержимого.сделать снимок экрана WPF datagrid с scrollviewer
К сожалению, мой ScrollViewer не имеет разной высоты, фактического веса или RenderSize.Height, чем dataGrid. Так что я всегда получаю видимую часть Контента.
Кто-нибудь знает, как это сделать правильно, что на самом деле он принимает весь контент?
Код:
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] (http://wpfinspector.codeplex.com/) для просмотрите визуальное дерево DataGrid. Вам нужно будет убедить DataGrid, что у него достаточно места, прежде чем использовать его как визуальный. –