2

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();

問題は、ドキュメントを表示するときに、最初のページ (またはローテーションを開始したときに表示されていたページ) が完全に更新されないことです。(ページ サイズは変更されますが、変換は有効になりません。) スクロールしてビューの外に出てから戻るまで、すべて問題ありません。これを修正するにはどうすればよいですか?

4

1 に答える 1

2

更新: この問題は、リモート デスクトップ セッション内での作業が原因でした。

于 2011-03-21T02:03:24.933 に答える