2011-08-17 75 views
0

我有一頁需要打印兩個UIElement,其中一個是StackPanel,另一個是用於顯示測試分數的自定義圖形控件。圖形控件可以根據要顯示的測試數量來設置任意長度,所以有時候我可以同時適用於一個頁面,而其他時間則需要單獨的頁面。在Silverlight 4中打印多個UIElements

在單獨的頁面上打印它們可以正常工作,因爲我只是將UIElement設置爲pageview,我遇到的問題是我無法弄清楚如何將它們組合在單個頁面上進行打印。我嘗試在代碼隱藏中創建一個StackPanel並向其中添加元素,但由於元素只能有一個父元素,因此我必須創建臨時對象來保存每個元素,同時從原始父元素中刪除,然後將臨時元素賦予新的StackPanel 。問題是,在我這樣做後,所有的綁定數據都會丟失

任何想法都會很棒!謝謝。

回答

0

而不是將實際元素添加到StackPanel進行打印,您可以創建這些元素的快照並僅將圖像添加到StackPanel。您可以從UIElement使用下面的方法來創建一個Image

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。不適用於SL雖然 –

+0

好的,所以我的下一個問題是有沒有辦法只拍攝UIElement的某個部分?假設我想使用整個頁面作爲元素,計算我需要的頁數,然後從頂部到-1024,然後從-1024到-2048拍攝一張照片,依此類推,直到我得到每一頁。這可能嗎? – Josh

+0

@Josh - 您可以嘗試使用該WriteableBitmap進行遊戲。這可能是因爲你可以將UIElement的特定部分渲染給它。不幸的是,我沒有一個完整的解決方案。 –

0

或者只是把圖像中的Canvas,然後比較Canvas的身高和形象的高度來計算頁數。