gpt4 book ai didi

c# - WPF 文档查看器 : Navigate using internal link not accurate on first click

转载 作者:行者123 更新时间:2023-12-02 15:27:45 25 4
gpt4 key购买 nike

在 WPF 中,我在 Frame 控件中有一个 DocumentViewer。 DocumentViewer 显示一个用 MS Word 生成的 XPS 文档。该文档包含一个目录,以帮助浏览文档。

DocumentViewer 允许用户单击这些链接并导航到相应的页面,只要将 DocumentViewer 放置在允许导航的控件(例如框架)中即可。

当用户第一次导航时,DocumentViewer 不会准确地跳转到链接的位置。文档中越远,跳转位置与实际位置之间的空间就越大。看起来每页都有一定数量的偏差。单击第一个链接后,导航工作正常。

当使用框架上的导航按钮向后导航时,一旦加载第一个 View ,链接准确性就会再次下降。

根据 this发布后,首次单击链接后将创建一个新的 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 文件包含一个 TOC 和两章,每章之间有大约 40 页。导航到第二章时问题变得很清楚(关闭 3 页)。

最佳答案

将近两年后,我重新审视了这个问题并找到了解决方案。

从我的原始帖子中可以看出,我使用了一个 Frame,其内容设置为 DocumentViewerFrame 用于启用 XPS 文档内的导航。

一些细节:

第一次加载文档时,Frame 的实际Content 被设置为DocumentViewerFrameSourcenull。单击文档中的链接时,Frame 会导航到该位置,但准确性很差,如我在上面的问题中所述。在幕后,Frame 已将其 Content 更改为 FixedDocumentSequence 的实例,并且其 Source 设置为单击 Uri。从现在开始,导航工作非常准确。

解决方案:

解决方法其实很简单。不是将 DocumentViewer 放入 Frame 并将 DocumentViewer.Document 属性设置为实际的 FixedDocumentSequenceFrame.Source 属性应设置为 FixedDocumentSequenceUri

FixedDocumentSequence 实现可用于检索 Uri 的显式接口(interface)属性 IUriContext.BaseUri

在我的代码中,我使用绑定(bind)来设置源:

<UserControl x:Class="XPSDocumentView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:base="clr-namespace:System.Windows.Markup;assembly=System.Xaml" >

<Grid>
<Frame Margin="5" NavigationUIVisibility="Hidden"
Source="{Binding Path=Document.(base:IUriContext.BaseUri)}" />
</Grid>

</UserControl>

在后面的代码中,您可以通过这样做来完成同样的事情:

XpsDocument xpsDoc = new XpsDocument(Path, FileAccess.Read);
FixedDocumentSequence document = xpsDoc.GetFixedDocumentSequence();
frame.Source = ((System.Windows.Markup.IUriContext)document).BaseUri;

关于c# - WPF 文档查看器 : Navigate using internal link not accurate on first click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29518575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com