Проблемы FlowDocument с InlineUIContainer (изображение, сетка данных) при создании XPS

Я пытаюсь сохранить FlowDocument как XPS. Я использую .Net 4.0. FlowDocument содержит следующие элементы:

    <Paragraph>
    <InlineUIContainer BaselineAlignment="Center">
        <Image Source="/MyNamespace;component/Images/logo.png"/>
    </InlineUIContainer>
</Paragraph>

    <Paragraph>
    <Run Text="{Binding Path=TextBinding, FallbackValue='Oups, binding did not work'}"></Run>
</Paragraph>

<InlineUIContainer>
        <DataGrid ItemsSource="{Binding Path=Items}" AutoGenerateColumns="False"
                  CanUserAddRows="False" RowHeaderWidth="0">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Item Number"
                                    Binding="{Binding Path=Id}" Width="100" />
                <DataGridTextColumn Header="Description"
                                    Binding="{Binding Path=ItemDescription}" Width="200" />
            </DataGrid.Columns>
        </DataGrid>
    </InlineUIContainer>

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

Теперь мне нужно преобразовать это в файл XPS на сервере (я хотел бы печатать партиями!).

Итак, я использую следующий код:

flowDocument.DataContext = myViewModel;

            Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.SystemIdle,
                                                new DispatcherOperationCallback(arg => null), null);

 string xpsFilePath = String.Concat(@"c:\temp\", Guid.NewGuid(), ".xps");

        using (FileStream outputFile = new FileStream(xpsFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
        using (Package package = Package.Open(outputFile, FileMode.Create, FileAccess.ReadWrite))
        using (XpsDocument xpsDoc = new XpsDocument(package, CompressionOption.Maximum))
        {
            XpsSerializationManager rsm = new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);
            DocumentPaginator paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator;
            rsm.SaveAsXaml(paginator);
            rsm.Commit();
        }

И угадайте, что? 1) Изображение отсутствует 2) DataGrid пуста, хотя линии нарисованы => Только Run отображается правильно

Я пробовал всевозможные комбинации, которые можно найти в сети, но они никогда не выходили должным образом. И ни о каком неавтоматическом решении не может быть и речи !!!

Не могу дождаться, когда меня кто-нибудь спасет !!! заранее спасибо


person Stephane Ehret    schedule 30.10.2013    source источник


Ответы (1)


см. в конце http://social.msdn.microsoft.com/Forums/en-US/51b358e5-8d59-43a5-b5e6-d9bd90f59692/problem-with-saving-inlineuicontainer-items-in-a-flowdocument

это ответ для Silverlight, но я думаю, он должен работать и с WPF

person George Birbilis    schedule 25.02.2014