После продолжительной борьбы за ротацию документов для фиксированных документов с использованием documentViewer в WPF мне, наконец, удалось заставить его работать с кодом ниже:
//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();
Проблема в том, что при просмотре документа первая страница (или любая другая страница, которая была видна, когда вы начали вращение) не обновляется полностью. (Размер страницы изменяется, но преобразования не вступают в силу.) Пока вы не прокрутите изображение, затем назад и тогда все в порядке. Как мне это исправить?