2010-12-29 4 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

문제의 컨트롤은 제 3 자 룩리스 차트 컨트롤이며 OnLoaded 메서드의 최종 렌더링을 처리하므로 게으름이 아닙니다. 답변을 주셔서 감사합니다. –

관련 문제