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