我正在尝试打印我在代码中创建的 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; }
}
}