2013-07-04 110 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