2010-12-29 2 views
3

コードで作成しているWPF UserControlを印刷しようとしています。私はポストの終わりにDocumentPaginatorの実装でこれをやっています。レンダリングにOnLoadedを使用するUserControlを印刷する

私が持っている問題は、コントロールが完全にレンダリングされないように、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

私はまったく同じ問題を抱えています。あなたは解決策を見つけましたか? – l33t

答えて

-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 }); 
+0

問題のコントロールは、サードパーティレスレスチャートコントロールであり、OnLoadedメソッドの最終的なレンダリングを扱うため、怠惰のケースではありません:)答えていただきありがとうございます。 –

関連する問題