WPFDocumentViewer:第一次点击时使用内部链接导航不准确DocumentViewer显示使用MSWord生成的XPS文档。该文档包含一个目录,以帮助浏览文档。只要将DocumentViewer放置在允许导航的控件(例如框架)内,DocumentViewer就允许用户单击这些链接并导航到相应的页面。当用户第一次导航时,DocumentViewer不会跳转到链接的确切位置。文档越远,跳转位置和实际位置之间的空间就越大。看起来每个页面都有一定的关闭次数。单击第一个链接后,导航工作正常。使用框架上的导航按钮向后导航时,一旦加载第一个视图,链接精度就会重新出现。根据这篇文章,第一次单击链接后会创建一个新的DocumentViewer。似乎这样创建了一个按预期工作的实例。为什么初始实例导航不准确,我该如何解决这个问题?下面截取的代码可用于重现该问题。窗口内的XAML:代码隐藏:publicMainWindow(){InitializeComponent();加载文档();}privatevoidLoadDoc(){XpsDocumentxpsDoc=newXpsDocument("test.xps",FileAccess.Read);docViewer.Document=xpsDoc.GetFixedDocumentSequence();}test.xps文档包含一个TOC和两章,它们之间有大约40页。导航到第二章时问题变得很清楚(少了3页)。差不多两年后,我重新审视了这个问题并找到了解决方案。正如您从我的原始帖子中看到的那样,我使用的是一个框架,其内容设置为DocumentViewer。框架用于启用XPS文档中的导航。一些细节:当文档第一次加载时,Frame的实际内容将被设置为DocumentViewer。框架的来源为空。单击文档中的链接时,框架会导航到该位置,但准确性很差,如上述问题所述。在幕后,Frame已将其Content更改为FixedDocumentSequence的一个实例,并将其Source设置为单击的Uri。从现在开始,导航工作完全准确。解决方案:解决方案其实很简单。不要将DocumentViewer放在框架中并将DocumentViewer.Document属性设置为实际的FixedDocumentSequence,Frame.Source应该将Frame.Source属性设置为FixedDocumentSequence的Uri。FixedDocumentSequence实现可用于检索Uri的显式接口属性IUriContext.BaseUri。在我的代码中,我使用绑定来设置源代码:在后面的代码中,您可以通过以下方式完成同样的事情:如果对您有用,您需要了解更多有关C#的学习教程,希望您多加付出注意它——XpsDocumentxpsDoc=newXpsDocument(Path,FileAccess.Read);FixedDocumentSequence文档=xpsDoc.GetFixedDocumentSequence();frame.Source=((System.Windows.Markup.IUriContext)document).BaseUri;本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
