2013-07-04 119 views
0

我正在開發一個Windows Phone 8應用程序,我使用Rectangle和Lines在放置在ScrollViewer內的Canvas中繪製圖形。Canvas繪圖創建System.OutOfMemoryException Win Phone 8

但我畫布的拉伸期間面臨的System.OutOfMemoryException(圖可以去超過3倍的屏幕的大小)

我已經把一個的ScrollViewer內的畫布的拉伸期間。當我刪除ScrollViewer時,問題不會發生,但即使設置了屬性Scrollviwer.HorizontalScrollBarVisibilty = Visible,我也無法滾動畫布。

<ScrollViewer Name="MainScrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Stretch" HorizontalScrollBarVisibility="Auto" Grid.RowSpan="2" > 
    <Canvas x:Name="MainCanvas" HorizontalAlignment="Left" Tap="OnCanvasTap" > 
     <Canvas.RenderTransform> 
      <CompositeTransform CenterX="100" CenterY="75" /> 
     </Canvas.RenderTransform> 
    </Canvas> 
</ScrollViewer> 

我也用GC.CollectCanvas.Children.Clear()我在哪裏繪製但即使如此,該問題仍然存在嘗試。

+0

使用較小的畫布? – K3N

+0

感謝您的迴應,我正在使用畫布繪製圖形,有時根據持續時間圖形非常大。我正在使用線條畫。有什麼更好的方法來處理它? – vasuy19

回答

0

取代在可滾動div內使用大型畫布來包含所有圖形,您可以使用較小的畫布,最佳實際畫面大小的最大值(不是圖形),然後使用翻譯畫布並重新繪製圖形翻譯的位置。

理想情況下,因爲如果你有一個巨大的畫布,只看到25%,那麼其他75%是浪費的內存。

通過將畫布作爲「窺視孔」與翻譯相結合,您將在屏幕上獲得相同的結果(您可以一次看到100%的可能性),而且您無需擔心圖形因爲這將由畫布自動剪切。

您可以將翻譯附加到鼠標/觸摸拖動操作或創建「虛擬」滾動條(如果首選)。

+0

謝謝肯。我遵循了你的建議,並且只繪製了屏幕尺寸圖的兩倍,其餘部分我正在清除畫布並繪製下一部分。 :) – vasuy19