プログラムでビジュアルを作成する小さなアプリを作成しましたが、横向きのページに印刷しようとしています (縦向きにクリップされます)。印刷すると横向きになりますが、縦向きに制限されていたため、ビジュアルはまだ切り取られています。
これが私のコードです:
StackPanel page = new StackPanel();
// ... generate stuff to the page to create the visual
PrintDialog dialog = new PrintDialog(); // System.Windows.Controls.PrintDialog
bool? result = dialog.ShowDialog();
if(result.HasValue && result.Value)
{
dialog.PrintTicket.PageOrientation = PageOrientation.Landscape;
Size pageSize = new Size { Width = dialog.PrintableAreaWidth,
Height = dialog.PrintableAreaHeight };
// pageSize comes out to {1056, 816}, which is the orientation I expect
page.Measure(pageSize);
// after this, page.DesiredSize is e.g. {944, 657}, wider than portrait (816).
page.UpdateLayout();
dialog.PrintVisual(page, "Job description");
}
これを実行した後、印刷されたコンテンツは正しく配置されますが、依然として 816 の幅にクリップされているように見え、コンテンツのかなりの部分が切り取られています。印刷された紙の上に別の紙をかざしてこれを確認したところ、完全に収まりました。
コントロールを測定して配置するのに間違っていることはありますか? プリンターが横向きの全スペースを使用できるようにするにはどうすればよいですか?