.NET WPFアプリケーション:リソースの.xpsドキュメントの読み込み
-
24-10-2019 - |
質問
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();
所属していません StackOverflow