Я пытаюсь сделать снимок экрана с сеткой данных, в которой должно отображаться много строк. Итак, есть скроллвьювер. Поэтому, когда я просто помещаю сетку данных в метод рендеринга RenderTargetBitmap, я, очевидно, просто получаю видимую часть сетки данных. Я читал, что можно сделать снимок экрана содержимого при фактическом рендеринге ItemsPresenter ScrollViewer этого элемента управления, поскольку ItemsPresenter будет иметь «настоящую» ширину и высоту содержимого.
К сожалению, мой ScrollViewer не имеет другой высоты, ActualHeight или 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);
}