我的各种WPF应用程序显示FlowDocument的.我可以使用打印WPF FlowDocument 的答案中描述的方法打印它们.
现在我想添加一个"打印预览"功能.在正常情况下,我正在打印窗口中显示的FlowDocument,因此我不需要打印预览.但在某些情况下,要打印的FlowDocument是在内存中即时构建的.在这些情况下,我想在打印前显示它.
现在,我当然可以弹出一个新窗口并显示FlowDocument,但是
我希望预览真的感觉它是打印操作的一部分,而不仅仅是应用程序中的另一个窗口.
我不想在FlowDocumentScrollViewer中使用普通的FlowDocument.它不是"任何大小",而是需要约束纸张的大小,特定的HxW比率和分页.
建议?
我应该只使用标准窗口,在这种情况下,如何确保FlowDocument处于适当的比例?
是否有更"集成"的方式在Windows的PrintDialog UI范围内进行预览?
谢谢
题
BlockUIContainer?背景
我生成FlowDocument了一段文本,其中Rectangle包含DrawingBrushes从资源字典和BlockUIContainer自定义控件填充的一些元素.
在任何的FlowDocument*的观察时,所述文档正确呈现控制无论其当文档被转换为固定文档/ XpsDocument,没有一个Rectangle或BlockUIContainer元素渲染.
我几乎可以肯定这是因为没有测量/安排控件,但是无法弄清楚如何在转换为XpsDocument之前强制执行.
我已经LogicalTree递归地走过去做了以下事情,
UIElement element = (UIElement)d;
element.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
element.Arrange(new Rect(element.DesiredSize));
element.UpdateLayout();
Run Code Online (Sandbox Code Playgroud)
这里d是一个DependencyObject.我可以看到这在调试器中以break-pointed为单位设置ActualWidth和ActualHeight属性.
我试图Dispatcher按照Will♦的建议强制渲染.
用于打印XpsDocument的代码
public class XpsDocumentConverter
{
public static XpsDocumentReference CreateXpsDocument(FlowDocument document)
{
// Need to clone the document so that the paginator can work
FlowDocument clonedDocument = DocumentHelper.Clone<FlowDocument>(document); …Run Code Online (Sandbox Code Playgroud) 我正在WPF中写一个笔记记录应用程序,使用FlowDocument每个单独的笔记.该应用按标签搜索和过滤笔记.我想将当前筛选列表中的所有笔记打印为单独的文档,我只想在作业开头显示一个打印对话框.
我在这个帖子中找到了一个很好的打印示例,但它适用于打印单个FlowDocument,因此它使用CreateXpsDocumentWriter()显示打印对话框的重载.
所以,这是我的问题:任何人都可以提出一些好的代码来打印一个FlowDocument没有显示PrintDialog?我想我会在程序开始时显示打印对话框,然后循环我的笔记集以打印每个FlowDocument.