我正在尝试打印我在代码中创建的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; }
}
}
答案 0 :(得分:-1)
你总是可以作弊并使用反射来调用方法。
var instance = new MyUserControl() as UserControl;
var method = instance.GetType().GetMethod("OnLoadedOrWhateverTheMethodNameIs",
BindingFlags.Instance |
BindingFlags.NonPublic);
if(method != null)
method.Invoke(instance, new object[] { instance, EventArgs.Empty });