많은 행을 표시해야하는 DataGrid의 스크린 샷을 만들려고합니다. 그래서 스크롤 뷰어가 있습니다. 그래서 DataGrid를 RenderTargetBitmap의 Render Method에 넣을 때 나는 분명히 DataGrid의 가시적 인 부분만을 얻습니다. ItemsPresenter에 내용의 "실제"너비와 높이가 있으므로 실제로 해당 컨트롤의 ScrollViewer의 ItemsPresenter를 렌더링 할 때 내용의 스크린 샷을 찍을 수 있습니다.scrollviewer를 사용하여 WPF DataGrid의 스크린 샷을 찍으십시오.
불행히도 내 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);
}
DataGrid 컨트롤은 보이는 내용 만 최적화로 렌더링하므로 더 이상 볼 것이 없습니다. [WPF Inspector] (http://wpfinspector.codeplex.com/)와 같은 것을 사용하여 직접 볼 수 있습니다. DataGrid의 시각적 트리를 봅니다. DataGrid에 시각적으로 사용하기 전에 공간이 충분한 지 확인해야합니다. –