У меня есть окно WPF с кадром. У меня есть некоторый код для распечатывания содержания кадра с помощью printdialog и printvisual. Но это только распечатает то, что появляется на экране даже при том, что прокрутки кадра и другие части доступны.
Есть ли способ добавить разбиение на страницы и удостовериться, что все содержание моего кадра распечатает.
Или есть ли другой способ взять мое содержание кадра и распечатать его? т.е. не использовать printvisual?
Да. Я сделал это. Это не очень сложно.
Поместите ваш фрейм внутрь ScrollViewer, у которого обычно отключена горизонтальная и вертикальная прокрутка
Когда вы будете готовы к печати, включите вертикальную прокрутку. Это приведет к тому, что фрейму будет сказано, что у него бесконечное вертикальное пространство, поэтому он отобразит все содержимое. Затем вызовите UpdateLayout(), чтобы получить макет для обновления.
Реализуйте IDocumentPaginator, чтобы возвращать один и тот же фрейм для каждой страницы, но каждый раз настраивать клип и RenderTransform для отображения разной части реального фрейма.
Печать с использованием собственного IDocumentPaginator
Приведенное выше описание предполагает, что вы хотите зафиксировать ширину фрейма на ширине страницы и расположить его вертикально. Это подходит для веб-страницы, но не для электронной таблицы. Для содержимого, похожего на электронную таблицу, вы должны установить ScrollViewer так, чтобы он позволял прокрутку в обоих направлениях, предоставляя фрейму бесконечное пространство в каждую сторону. В этом случае IDocumentPaginator будет таким же, за исключением того, что RenderTransforms и clipping будут выбраны для итерации по горизонтали и вертикали.
Эта техника фактически работает для любого содержимого WPF, а не только для фрейма.