Проблема с созданием документов XPS с изображениями в библиотеке классов WCF - PullRequest
1 голос
/ 06 января 2010

У меня есть приложение Silverlight, которое использует веб-сервис для создания документов XPS. Шаблоны документов создаются как элементы управления XAML в библиотеке классов WCF.

public void GenerateXPS()
{
    Type typeofControl = Type.GetType(DOCUMENT_GENERATOR_NAMESPACE + "." + ControlTypeName, true);
    FrameworkElement control = (FrameworkElement)(Activator.CreateInstance(typeofControl));

    control.DataContext = DataContext;

    FixedDocument fixedDoc = new FixedDocument();
    PageContent pageContent = new PageContent();
    FixedPage fixedPage = new FixedPage();

    //Create first page of document
    fixedPage.Children.Add(control);
    ((IAddChild)pageContent).AddChild(fixedPage);
    fixedDoc.Pages.Add(pageContent);
    XpsDocument xpsd = new XpsDocument(OutputFilePath + "\\" + OutputFileName, FileAccess.ReadWrite);
    System.Windows.Xps.XpsDocumentWriter xw = XpsDocument.CreateXpsDocumentWriter(xpsd);
    xw.Write(fixedDoc);
    xpsd.Close();

    SaveToDocumentRepository();
}

Чтобы привязать фактические данные к моему шаблону документа, я установил свойство DataContext элемента управления. Проблема заключается в том, что когда я смотрю на свой XPS, изображения (я связываю элементы управления «Источник моего изображения» со строковым свойством, которое представляет URL-адрес моего изображения) не отображаются, как если бы они не были загружены. Как я могу решить эту проблему? Спасибо!

1 Ответ

1 голос
/ 16 февраля 2010

Связывающая инфраструктура, вероятно, нуждается в продвижении, поскольку вы работаете за пределами предполагаемого использования WPF.

Попробуйте добавить следующий код после установки текста данных:

control.DataContext = DataContext;

// we need to give the binding infrastructure a push as we
// are operating outside of the intended use of WPF
var dispatcher = Dispatcher.CurrentDispatcher;
dispatcher.Invoke(
   DispatcherPriority.SystemIdle,
   new DispatcherOperationCallback(delegate { return null; }),
   null);

Я расскажу об этом и других материалах, связанных с XPS, в этом блоге .

...