Скопируйте снимок элемента пользовательского интерфейса WP, содержащего полосу прокрутки

У меня есть единая сетка WPF, содержащая мой пользовательский элемент управления диаграммой, который будет отображаться в виде матрицы. Например, сетка будет отображать элементы управления диаграммой в формате 5 x 10 или заданном пользователем формате строк x столбцов. Uniform Grid помещается в ScrollViewer, который автоматически показывает полосы прокрутки, когда содержимое не помещается в окне. Мое намерение состоит в том, чтобы включить «Копирование» матрицы диаграмм, чтобы пользователь мог вставлять все диаграммы в MS Word/Powerpoint.

Я использовал стандартную копию кода элемента пользовательского интерфейса WPF. Проблема, с которой я столкнулся, заключается в том, что копия работает нормально только в том случае, если все диаграммы видны в единой сетке. Если я получу полосу прокрутки, копия будет учитывать только видимую область и заменять невидимую область (область под полосой прокрутки) черным пятном. Однако, если пользователь прокручивает панель, чтобы просмотреть весь контент один раз, то «Копировать» будет работать нормально (т.е. показывает весь контент в сетке). Я понимаю, что WPF отображает контент только тогда, когда он виден.

Но как именно мне решить мою проблему, не попросив пользователя просмотреть весь контент один раз перед выполнением «Копировать»?


person WpfProgrammer    schedule 20.01.2012    source источник
comment
Под «стандартной копией кода элемента пользовательского интерфейса WPF» вы имеете в виду рисование UIElement в RenderTargetBitmap?   -  person Clemens    schedule 20.01.2012
comment
Я только что провел быстрый тест с 30 метками в 5 столбцах в UniformGrid внутри ScrollViewer. Уменьшил ScrollView так, чтобы была видна только часть UniformGrid, затем преобразовал UniformGrid в RenderTargenBitmap и закодировал в файл jpeg. Работает довольно хорошо, т.е. в формате jpeg содержится весь контент. Можете ли вы опубликовать код, где вы выполняете рендеринг, в RenderTargetBitmap?   -  person Clemens    schedule 24.01.2012


Ответы (1)


  1. сделать размер окна максимальным
  2. сделать "Копировать"
  3. восстановить размер окна

Пользователь заметит изменение размера окна, но, по крайней мере, это происходит автоматически (намного лучше, чем изменение размера окна вручную)

person Tyler Long    schedule 16.12.2015