2011-08-17 2 views
0

두 개의 UIElement이 인쇄되어야하는 페이지가 있습니다. 하나는 StackPanel이고 다른 하나는 테스트 점수를 표시하기위한 사용자 지정 그래프 컨트롤입니다. 그래프 컨트롤은 표시 할 테스트의 수에 따라 길이가 다를 수 있으므로 때로는 한 페이지에 모두 맞출 수 있고 다른 시간에는 별도의 페이지가 필요할 수 있습니다.Silverlight 4의 여러 UIElements 인쇄

개별 페이지에 인쇄하면 페이지 뷰어로 UIElement를 설정 했으므로 문제가 없습니다. 문제는 단일 페이지에서 인쇄하기 위해 결합하는 방법을 알 수 없다는 것입니다. 나는 코드 숨김에 StackPanel을 생성하고 요소를 추가하려고 시도했지만, 요소에는 부모가 하나만있을 수 있기 때문에 원래 부모에서 제거한 다음 임시 StackPanel에 임시 객체를 부여하는 동안 임시 객체를 만들어야합니다. . 문제는 내가 바인딩 된 모든 데이터가 사라진다는 것입니다.

멋진 아이디어가 될 것입니다. 감사.

답변

0

인쇄를 위해 StackPanel에 실제 요소를 추가하는 대신 해당 요소의 스냅 샷을 만들고 StackPanel에 이미지 만 추가 할 수 있습니다. 페이지 수를 계산하기 위해 Canvas의 높이와 이미지 높이를

public static Image CreateElementImage(UIElement element) 
{ 
    var bitmap = new WriteableBitmap((int)element.RenderSize.Width, (int)element.RenderSize.Height); 

    Array.Clear(bitmap.Pixels, 0, bitmap.Pixels.Length); 
    bitmap.Render(element, element.RenderTransform); 
    bitmap.Invalidate(); 

    var result = new Image {Source = bitmap}; 

    return result; 
} 
+0

WPF에서이 작업을 수행하는 더 쉬운 방법은 VisualBrush를 사용하는 것입니다. SL3에서는 사용할 수 없습니다. –

+0

그래, 그럼 내 다음 질문은 UIElement의 특정 부분 만 찍을 수있는 방법일까요? 전체 페이지를 요소로 사용하고 필요한 페이지 수를 계산 한 다음 위에서 그림을 -1024로 가져간 다음 -1024에서 -2048까지 그림을 그릴 때까지 이 모든게 가능한가? – Josh

+0

@Josh - WriteableBitmap으로 놀아 볼 수 있습니다. UIElement의 특정 부분을 렌더링 할 수 있습니다. 불행히도 완벽한 솔루션이 없습니다. –

0

을 또는 단지 Canvas에 이미지를 넣고 비교 : 당신은 UIElement에서 만든 Image에 다음과 같은 방법을 사용할 수 있습니다.

관련 문제