WPF で documentViewer を使用して固定ドキュメントのドキュメント ローテーションを実装する長い戦いの後、最終的に以下のコードで動作させることができました。
//Increment Rotation
if (Rotation == 270)
Rotation = 0;
else
Rotation += 90;
FixedDocument document = (FixedDocument)docViewer.Document;
foreach (PageContent page in document.Pages)
{
//Create New Size
Size newSize = new Size(page.Child.Height, page.Child.Width);
//Adjust Size
page.Child.Height = newSize.Height;
page.Child.Width = newSize.Width;
page.Height = newSize.Height;
page.Width = newSize.Width;
//Create Transform
TransformGroup pageTransform = new TransformGroup();
pageTransform.Children.Add(new RotateTransform(Rotation));
//Set Transform Shift
if (Rotation == 90)
pageTransform.Children.Add(new TranslateTransform(newSize.Width, 0));
if (Rotation == 180)
pageTransform.Children.Add(new TranslateTransform(newSize.Width, newSize.Height));
if (Rotation == 270)
pageTransform.Children.Add(new TranslateTransform(0, newSize.Height));
page.Child.RenderTransform = pageTransform;
//Update
page.Measure(newSize);
page.Arrange(new Rect(newSize));
page.UpdateLayout();
}
docViewer.Document = null;
docViewer.InvalidateVisual();
docViewer.Document = document;
docViewer.InvalidateVisual();
docViewer.UpdateLayout();
問題は、ドキュメントを表示するときに、最初のページ (またはローテーションを開始したときに表示されていたページ) が完全に更新されないことです。(ページ サイズは変更されますが、変換は有効になりません。) スクロールしてビューの外に出てから戻るまで、すべて問題ありません。これを修正するにはどうすればよいですか?