2011-02-04 10 views
2

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?

Répondre

1

Mise à jour: Ce problème a été provoqué en travaillant à partir d'une session de bureau à distance.

Questions connexes