В WPF у меня есть DocumentViewer внутри элемента управления Frame. DocumentViewer показывает документ XPS, созданный с помощью MS Word. Документ содержит оглавление, помогающее перемещаться по документу.
DocumentViewer позволяет пользователю щелкать эти ссылки и переходить к соответствующим страницам, если DocumentViewer размещен в элементе управления, который позволяет осуществлять навигацию (например, фрейм).
Когда пользователь перемещается в первый раз, DocumentViewer не переходит точно в указанное место. Чем дальше в документе, тем больше становится расстояние между местом перехода и фактическим местоположением. Похоже, что он отключен на определенную сумму за страницу. После этого первого щелчка по ссылке навигация работает отлично.
При переходе назад с помощью кнопок навигации на фрейме точность ссылки снова меняется, как только загружается самый первый вид.
Согласно этому сообщению, новый DocumentViewer создается после первого нажатия на ссылку. Кажется, что это создает экземпляр, который работает, как ожидалось.
Почему исходный экземпляр не выполняет точную навигацию и как это решить?
Приведенный ниже фрагмент кода можно использовать для воспроизведения проблемы.
XAML внутри окна:
<Frame>
<Frame.Content>
<DocumentViewer Name="docViewer" />
</Frame.Content>
</Frame>
Код позади:
public MainWindow()
{
InitializeComponent();
LoadDoc();
}
private void LoadDoc()
{
XpsDocument xpsDoc = new XpsDocument("test.xps", FileAccess.Read);
docViewer.Document = xpsDoc.GetFixedDocumentSequence();
}
Документ test.xps содержит оглавление и две главы по 40 страниц между ними. Проблема становится понятной при переходе ко второй главе (она меньше на 3 страницы).