是否可以从WPF文本块链接到word文档中的书签?
到目前为止,我有:
<TextBlock TextWrapping="Wrap" FontFamily="Courier New">
<Hyperlink NavigateUri="..\\..\\..\\MyDoc.doc"> My Word Document </Hyperlink>
</TextBlock>
我假设相对路径来自exe位置。我根本无法打开文件。
答案 0 :(得分:5)
作为我之前回答的补充,有一种编程方式可以打开本地Word文件,搜索书签并将光标放在那里。我从this excellent answer改编了它。如果你有这个设计:
<TextBlock>
<Hyperlink NavigateUri="..\\..\\MyDoc.doc#BookmarkName"
RequestNavigate="Hyperlink_RequestNavigate">
Open the Word file
</Hyperlink>
</TextBlock>
使用此代码:
//Be sure to add this reference:
//Project>Add Reference>.NET tab>Microsoft.Office.Interop.Word
private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) {
// split the given URI on the hash sign
string[] arguments = e.Uri.AbsoluteUri.Split('#');
//open Word App
Microsoft.Office.Interop.Word.Application msWord = new Microsoft.Office.Interop.Word.Application();
//make it visible or it'll stay running in the background
msWord.Visible = true;
//open the document
Microsoft.Office.Interop.Word.Document wordDoc = msWord.Documents.Open(arguments[0]);
//find the bookmark
string bookmarkName = arguments[1];
if (wordDoc.Bookmarks.Exists(bookmarkName))
{
Microsoft.Office.Interop.Word.Bookmark bk = wordDoc.Bookmarks[bookmarkName];
//set the document's range to immediately after the bookmark.
Microsoft.Office.Interop.Word.Range rng = wordDoc.Range(bk.Range.End, bk.Range.End);
// place the cursor there
rng.Select();
}
e.Handled = true;
}
答案 1 :(得分:4)
在WPF应用程序而不是网页上使用超链接需要您自己处理RequestNavigate事件。
有一个很好的例子here。
答案 2 :(得分:3)
根据official documentation,它应该非常简单:
<TextBlock>
<Hyperlink NavigateUri="..\\..\\MyDoc.doc#BookmarkName"
RequestNavigate=”Hyperlink_RequestNavigate”>
Open the Word file
</Hyperlink>
</TextBlock>
private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
e.Handled = true;
}
但是,a lot of inofficial页面已达成共识,这只能起作用
.doc
个文件(没有Office 2007 .docx
文件),不幸的是尝试将此文件与.docx
文件一起使用会产生错误。在Office 2007及更高版本上使用此.doc
文件将打开文档,但在第一页上。
您可以使用AutoOpen宏来解决Office 2007及更高版本的限制,请参阅此处了解如何pass a Macro argument到Word。这将需要更改与该系统一起使用的所有文档(并提出有关使用宏的其他问题)。