2010-05-05 4 views
1

Silverlight 4 응용 프로그램을 빌드하고 있습니다. 이 응용 프로그램은 ItemsControl의 내용을 인쇄합니다. 이 ItemsControl은 ItemTemplate을 사용하여 컨트롤에 바인딩 된 항목을 렌더링합니다. 전체적으로 컨트롤에 바인딩 된 500 개의 항목이 있습니다.Silverlight 4 - 인쇄 항목 제어

이상하게도 ItemsControl을 인쇄하려고하면 특정 지점 이후에 잘린 것처럼 보입니다. 나는 그것이 끊어지면 말할 수 없다. 나는 그것이 잘리는 것을 알고 있습니다. 나는 그것이 가상화와 관련이 있다는 직감을 가지고 있습니다. 그러나, 나는 이것을 극복하는 방법을 모르겠습니다. 현재, ItemsControl을 인쇄하고 있습니다.

private void printHyperlink_Click(object sender, RoutedEventArgs e) 
{ 
    PrintDocument printDocument = new PrintDocument(); 
    printDocument.BeginPrint += 
    new EventHandler<BeginPrintEventArgs>(printDocument_BeginPrint); 
    printDocument.PrintPage += 
    new EventHandler<PrintPageEventArgs>(printDocument_PrintPage); 
    printDocument.EndPrint += 
    new EventHandler<EndPrintEventArgs>(printDocument_EndPrint); 

    printDocument.Print("My Items"); 
} 

void printDocument_BeginPrint(object sender, BeginPrintEventArgs e) 
{} 

void printDocument_PrintPage(object sender, PrintPageEventArgs e) 
{ e.PageVisual = myItemsControl; } 

void printDocument_EndPrint(object sender, EndPrintEventArgs e) 
{} 

내가 뭘 잘못하고 있니? 어떻게하면 ItemsControl의 모든 항목이 렌더링 될 때 인쇄되는지 확인할 수 있습니까?

+0

+1, 이것은 아주 좋은 질문입니다. – AnthonyWJones

+0

한 페이지 이상인 500 개의 값이 맞습니까? 그것을 나타 내기 위해 HasMorePages 속성을 true로 설정합니까? – texmex5

답변

2

인쇄 API는 자동으로 ItemsControl의 항목에 페이지 매김을 적용하지 않습니다. 또한 이미 시각적 트리에있는 것을 인쇄하는 경우 결과가 인쇄시 창에 렌더링되는 것과 일치하도록 잘릴 수 있습니다.

는 당신이 필요합니다, 여러 페이지를 인쇄하려면 :
  • 는 해당 페이지에서 원하는 항목을 표시 영상을 생성 페이지에 표시 할 항목 수를 알아 내기 위해

    • 측정
    • 마지막 페이지 모두

    전체에 때까지 사실로 당신의 "e.PageVisual"로

  • 설정 e.HasMorePages 그들을 통과 이것은 상당한 양의 작업 일 수 있습니다. ItemTemplate을 사용하여 ItemsControl을 인쇄하려는 경우 위의 모든 작업을 수행해야합니다. 약간 더 정교한 시나리오 (예 : 페이지 번호, 머리말/꼬리말 추가 등)의 경우 더 많은 작업이 필요합니다.

    즉, 이런 식으로 처리하는 간단한 Silverlight 인쇄 API를 통해 라이브러리를 빌드 할 수 있습니다. 나는 최근에이 시나리오 (더 정교한 것들을 포함하여)를 정확하게 다루기위한 컨트롤을 블로그에 올렸다.

    http://www.davidpoll.com/2010/04/16/making-printing-easier-in-silverlight-4/