質問

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から取得しようとしないようです。

役に立ちましたか?

解決

XpsDocument ctor ファイルパスまたはaを受け入れます 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();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top