フレーム付きの WPF ウィンドウがあります。printdialog と printvisual を使用してフレームの内容を出力するコードがあります。ただし、フレームスクロールやその他の部分が利用可能であっても、これは画面に表示されるものだけを印刷します。
ページネーションを追加して、フレームのコンテンツ全体が印刷されるようにする方法はありますか?
または、フレームのコンテンツを取得して印刷する別の方法はありますか? つまり、printvisual を使用しないには?
はい。私はこれをやった。それほど難しいことではありません。
通常は水平スクロールと垂直スクロールが無効になっている ScrollViewer 内に Frame をラップします
印刷する準備ができたら、垂直スクロールを有効にします。これにより、Frame には垂直方向のスペースが無限にあることが通知されるため、すべてのコンテンツがレンダリングされます。次に UpdateLayout() を呼び出して、更新するレイアウトを取得します。
IDocumentPaginator を実装して、ページごとに同じフレームを返しますが、クリップと RenderTransform を毎回調整して、実際のフレームの異なる部分を表示します。
カスタム IDocumentPaginator を使用して印刷する
上記の説明は、フレームの幅をページ幅に固定し、垂直にページ付けすることを前提としています。これは Web ページには適していますが、スプレッドシートには適していません。スプレッドシートのようなコンテンツの場合は、両方向にスクロールできるように ScrollViewer を設定し、フレームに無限のスペースをそれぞれの方向に与えます。この場合、IDocumentPaginator は、RenderTransforms とクリッピングが水平方向と垂直方向の両方で繰り返されるように選択されていることを除いて同じです。
この手法は、実際にはフレームだけでなく、すべての WPF コンテンツに対して機能します。
関連項目
WPF ビジュアルのページ付けされた印刷