3

我正在尝试打印我在代码中创建的 WPF UserControl。我正在使用文章末尾的 DocumentPaginator 实现来执行此操作。

我遇到的问题是 DocumentPage 类没有在我的 UserControl 上调用 Loaded,因此控件没有完全呈现。我无法将 OnLoaded 中的代码移动到更好的位置,因为我不是控件的维护者。

在控件上触发 Loaded 事件的正确方法是什么?我意识到只有在控件附加到 PresentationSource 时才会触发该事件,但我试图发送打印作业而不在屏幕上显示内容。我可能可以在某处使用 Visibility=Hidden 来渲染控件,但这感觉既便宜又笨拙。

class MyPaginator : DocumentPaginator
{
    public MyPaginator()
    {
        PageSize = new Size(800, 600);
    }

    public override DocumentPage GetPage(int pageNumber)
    {
        var uc = new ChartUC();

        uc.Measure(PageSize);
        uc.Arrange(new Rect(PageSize));
        uc.UpdateLayout();

        return new DocumentPage(uc, PageSize, new Rect(PageSize), new Rect(PageSize));
    }

    public override bool IsPageCountValid
    {
        get { return true; }
    }

    public override int PageCount
    {
        get { return 1; }
    }

    public override System.Windows.Size PageSize
    {
        get;
        set;
    }

    public override IDocumentPaginatorSource Source
    {
        get { return null; }
    }
}
4

0 回答 0