我正在开发一个Windows Phone 8应用程序,我使用Rectangle和Lines在放置在ScrollViewer中的Canvas中绘制图形。
但在绘图期间,我在绘制画布时遇到System.OutOfMemoryException(图形可能超过屏幕大小的3倍)
我已将Canvas放置在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.Collect
和Canvas.Children.Clear()
我正在绘画,但即使这样,问题仍然存在。
答案 0 :(得分:0)
不是在可滚动div中使用大画布来包含所有图形,而是可以使用较小的画布,最佳实际屏幕尺寸(不是图形)的最大值,然后使用平移画布并重新绘制图形。翻译的位置。
最理想的是,如果你有一个巨大的画布,只看到25%,那么另外75%是浪费的内存。
通过将画布用作“窥视孔”并结合翻译,您将在屏幕上获得相同的结果(您可以看到一次可以看到的100%)并且您不必担心您的图形这将由画布自动剪裁。
您可以将翻译附加到鼠标/触摸拖动操作或制作“虚拟”滚动条(如果是首选)。