сделать скриншот таблицы данных WPF с помощью scrollviewer - PullRequest
3 голосов
/ 02 марта 2012

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

1 Ответ

0 голосов
/ 18 мая 2012

Лист прав.Вы можете создать экземпляр другой DataGrid, связанной с тем же источником, программно, поместить его в контейнер, который дает ему бесконечное пространство, подождать, пока он отрендерится, а затем сделать снимок экрана.Нет необходимости показывать его в пользовательском интерфейсе.

...