Приложение .NET WPF: загрузка ресурса .XPS - PullRequest
1 голос
/ 05 июня 2010

Я пытаюсь загрузить документ .xps в объект DocumentViewer в моем приложении WPF. Все работает нормально, кроме случаев, когда я пытаюсь загрузить ресурсный .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, который хранится как ресурс в приложении. 1008 *

1 Ответ

1 голос
/ 06 июня 2010

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();
...