.NET WPF应用程序:加载资源丰富的.XPS文档

.NET WPF应用程序:加载资源丰富的.XPS文档,.net,wpf,xpsdocument,documentviewer,.net,Wpf,Xpsdocument,Documentviewer,我正在尝试将.xps文档加载到WPF应用程序中的DocumentViewer对象中。除了我尝试加载一个资源丰富的.xps文档外,一切正常。当使用绝对路径时,我能够很好地加载.xps文档,但当我尝试加载资源化文档时,它会抛出“DirectoryNotFoundException” 下面是我加载文档的代码示例 using System.Windows.Xps.Packaging; private void Window_Loaded(object sender, Routed

我正在尝试将.xps文档加载到WPF应用程序中的DocumentViewer对象中。除了我尝试加载一个资源丰富的.xps文档外,一切正常。当使用绝对路径时,我能够很好地加载.xps文档,但当我尝试加载资源化文档时,它会抛出“DirectoryNotFoundException”

下面是我加载文档的代码示例

     using System.Windows.Xps.Packaging;

      private void Window_Loaded(object sender, RoutedEventArgs e)
        {
//Absolute Path works (below)
            //var xpsDocument = new XpsDocument(@"C:\Users\..\Visual Studio 2008\Projects\MyProject\MyProject\Docs\MyDocument.xps", FileAccess.Read); 
//Resource Path doesn't work (below)
var xpsDocument = new XpsDocument(@"\MyProject;component/Docs/Mydocument.xps", FileAccess.Read);
            DocumentViewer.Document = xpsDocument.GetFixedDocumentSequence();
        }
当抛出DirectoryNotFoundException时,它说“找不到路径的一部分:'C:\MyProject;component\Docs\MyDocument.xps'


它似乎试图从该路径获取.xps文档,就像它是计算机上的实际路径一样,而不是试图从存储为应用程序中的资源的.xps中获取。

XpsDocument
ctor
接受文件路径或
实例使用后一种方法的打包:

var uri = new Uri("pack://application:,,,/Docs/Mydocument.xps");
var stream = Application.GetResourceStream(uri).Stream;
Package package = Package.Open(stream);
PackageStore.AddPackage(uri, package);
var xpsDoc = new XpsDocument(package, CompressionOption.Maximum, uri.AbsoluteUri);
var fixedDocumentSequence = xpsDoc.GetFixedDocumentSequence();
_vw.Document = fixedDocumentSequence; // displaying document in viewer
xpsDoc.Close();

XpsDocument
ctor
接受文件路径或
实例。以下是使用后一种方法打开包的方法:

var uri = new Uri("pack://application:,,,/Docs/Mydocument.xps");
var stream = Application.GetResourceStream(uri).Stream;
Package package = Package.Open(stream);
PackageStore.AddPackage(uri, package);
var xpsDoc = new XpsDocument(package, CompressionOption.Maximum, uri.AbsoluteUri);
var fixedDocumentSequence = xpsDoc.GetFixedDocumentSequence();
_vw.Document = fixedDocumentSequence; // displaying document in viewer
xpsDoc.Close();

即使完成了上面列出的操作,它似乎仍在尝试读取我作为实际路径输入到参数中的任何字符串“在参数中,它抛出了一个错误,因为它正在查看C:\docs\mydocument.xps路径。在意识到
XpsDocument
ctor接受文件路径而不是URI后,我编辑了我的帖子。我再次编辑了它,添加了程序包的混乱。”。难看,但很管用。你帮了大忙。非常感谢。即使完成了上面列出的操作,它似乎仍在尝试读取我作为实际路径输入到参数中的任何字符串。例如,我在参数中输入了@“Docs/Mydocument.xps”,它抛出了一个错误,因为它正在查看C:\Docs\Mydocument.xps路径。在意识到
XpsDocument
ctor接受的是文件路径而不是URI之后,我编辑了我的帖子。我再次编辑了它,添加了与包的冲突。难看,但很管用。你帮了大忙。非常感谢。