В настоящее время мы используем WPF для создания многостраничного документа по накладной, который затем распечатывается / экспортируется через XPS.
Путь, который мы выбрали для достижения этой цели, - создать UserControl, содержащий стандартный ListBox и т. Д., Отображающий строки счета-фактуры, который затем включается в FlowDocument внутри тегов BlockUIContainer.
Когда этот FlowDocument помещается в теги FlowDocumentScrollViewer в окне, он работает отлично, при этом содержимое базы данных UserControl отображается правильно. Однако, когда мы пытаемся создать тот же FlowDocument в коде, он завершается с ошибкой "Не удается создать неизвестный тип" {clr-namespace: FOO} FooUserControl "XamlParseException. FlowDocument может быть успешно создан программно, если пользовательский элемент управления удален.
Это FlowDocument XAML:
<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:MARS"
ColumnWidth="400" FontSize="14" FontFamily="Georgia">
<Paragraph>
Blah
</Paragraph>
<BlockUIContainer>
<local:printTestUserControl></local:printTestUserControl>
</BlockUIContainer>
И этот код мы используем для его создания в коде:
FileStream xamlFile = new FileStream("printTestFlowDoc.xaml", FileMode.Open, FileAccess.Read);
FlowDocument content = (FlowDocument)XamlReader.Load(xamlFile);
flowDocScrollViewer.Document = content;
xamlFile.Close();
Причина, по которой мы создаем FlowDocument в коде, заключается в том, чтобы затем использовать объект Paginator, чтобы разделить его на серию FixedDocuments, чтобы затем распечатать / экспортировать в XPS, ни один из которых мы еще не пробовали, но из того, что я ' Вы читали до сих пор, кажется, что это реальный способ достижения многостраничной печати документов в WPF (где документ будет иметь верхний колонтитул на первой странице, итоговый нижний колонтитул на последней и x страниц строк между ними).
Любой совет по этому вопросу, или другие способы сделать это будет очень приветствоваться.
Это некоторые ссылки, по которым мы до сих пор собирали информацию, к сожалению, этого недостаточно! (я включу другие ссылки в комментарии, так как StackOverflow не доверяет мне более одной ссылки в настоящее время!)
См. Раздел «Динамическое создание документа FlowDinding, привязка данных и его печать». Скотт Хансельманн, похоже, столкнулся с той же проблемой, что и мы, но добавил строку
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.SystemIdle, new DispatcherOperationCallback(delegate { return null; }), null);
не удалось загрузить наш FlowDocument, однако он связывал только TextBlocks в своем FlowDocument, а не включал UserControl.
Большое спасибо за чтение этого места! и за любую помощь может предложить любой.