2

WPF アプリケーションの DocumentViewer オブジェクトに .xps ドキュメントを読み込もうとしています。リソース付きの .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 から取得しようとしているわけではありません。

4

2 に答える 2

1

XpsDocument ctorファイルパスまたはPackageインスタンスのいずれかを受け入れます。パッケージを開いて後者のアプローチを使用する方法は次のとおりです。

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();
于 2010-06-06T02:34:17.793 に答える