2010-04-30 3 views
3

구성했다 :인쇄 실버 라이트에서 우리는 응용 프로그램이이 같은 약 4

<Grid x:Name="LayoutRoot"> 
    <ScrollViewer> 
<Canvas x:Name="canvas"> 
    <StackPanel> < Button /><Slider /><Button /></StackPanel> 
    <custom:Blob /> 
    <custom:Blob /> 
    <custom:Blob /> 
</Canvas> 
    </ScrollViewer> 
</Grid> 

각 물방울은 1 이상의 사각형, 선 및 텍스트 상자로 구성; 캔버스의 어느 곳에 나 배치됩니다.

나는이 LayoutRoot를 사용하여 문서를 인쇄 할 경우 :

PrintDocument pd = new PrintDocument(); 
pd += (s, pe) => { pe.PageVisual = LayoutRoot; }; 
pd.Print("Blobs"); 

... 그것은 인쇄 화면처럼 - 스크롤, 슬라이더, 볼 수있는 모양이 - 인쇄되어 있습니다.

PageVisual = canvas를 설정하면 아무 것도 인쇄되지 않습니다.

모든 blob 개체와 그 개체 만 인쇄하려면 어떻게해야합니까? 그것들을 다른 컨테이너에 복사하고 해당 컨테이너를 PageVisual에 제공해야합니까? ViewBox를 사용하여 한 페이지에 모두 맞출 수 있습니까? 게시물을 읽는 동안 마음에 와서 어떤 포인터에 대한

감사합니다 ....

답변

2

첫 번째 아이디어는 캔버스 그룹 귀하의 Blob 객체의 크기였다. . UIElement에를 지정하는 것 외에도

, 당신은 PrintPageEventArgs .. :: PrintableArea 속성을 사용하여 인쇄 영역의 물리적 크기를 얻을 수 있습니다 : 그래서 당신에게 도움이 될 몇 가지 흥미로운 조각을 발견했다. UIElement가 PrintableArea 인 을 초과하는 경우 내용은 PrintableArea 경계에서 잘려진 이됩니다. 인쇄 가능 영역의 크기는 화면 기반 픽셀입니다.

당신은 여러 페이지로 문서를 인쇄 할 PrintPageEventArgs .. ::. HasMorePages 속성을 사용합니다. PrintPageEventArgs .. ::. HasMorePages의 기본값은 false이므로 1 페이지 문서의 경우 설정할 필요가 없습니다. 그러나 인쇄 할 페이지가 여러 개인 경우 PrintPageEventArgs .. ::. HasMorePages 속성을 true로 설정하면 인쇄 할 추가 페이지가 있음을 나타냅니다. 마지막 페이지가 인 경우 PrintPage 이벤트 처리기에서 PrintPageEventArgs .. ::. HasMorePages 을 false로 설정합니다.

Documentation article

+0

도움, 고마워. Canvas의 영역 (직사각형)을 인쇄 할 방법을 지정하는 방법이있을 것입니다 ...? 또는 비슷하게 StartPrint 이벤트에서 Canvas의 크기를 모든 개체의 최소 경계 사각형으로 변경 한 다음 EndPrint 이벤트에서 해당 크기를 복원합니다. 마지막으로, ViewBox는 한 페이지에 맞도록 Canvas를 변형 할 수 있습니까? – Number8

+0

확실치 않지만,이 문제를 해결하기 위해 챌린지가 없었지만, 1 페이지 이상 있고 내용이 적합하지 않다고 지정하면 무언가를해야합니다. 하지만 실제로 아무것도 수행하지 않으면 인쇄하기 전에 그룹화 캔버스의 크기를 조정 한 다음 나중에 인쇄를 마친 후에 크기를 다시 조정해야 할 수도 있습니다. – texmex5

0

당신은 인쇄하기 전에 LayoutRoot의 규모 tranform을 적용 할 수 있습니다.

그러나 인쇄 후 LayoutRoot의 크기를 줄이거 나 늘린 상태에서 문제가 발생했습니다. (묻는 질문 here)

관련 문제