Après une bataille lenghtly mise en œuvre de rotation de documents pour les documents fixes à l'aide de la DocumentViewer dans WPF Je manged enfin le faire fonctionner avec le code ci-dessous:WPF Document Viewer Mise à jour des questions
//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();
Le problème est que lorsque vous affichez la documenter la première page (ou quelle que soit la page était en vue lorsque vous avez commencé la rotation) ne se rafraîchit pas entièrement. (La taille de la page change, mais les transformations ne prennent pas effet.) Jusqu'à ce que vous défiliez hors de vue, puis de retour, puis tout va bien. Comment puis-je réparer ça?