表示する行が多すぎるデータグリッドのスクリーンショットを撮ろうとしています。したがって、スクロールビューアがあります。したがって、データグリッドを RenderTargetBitmap の Render メソッドに入れると、明らかにデータグリッドの表示可能な部分が取得されます。ItemsPresenter はコンテンツの「実際の」幅と高さを持つため、そのコントロールの ScrollViewer の 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);
}