0

我正在开发一个 windows phone 8 应用程序,我使用 Rectangle 和 Lines 在放置在 ScrollViewer 内的 Canvas 内绘制图形。

但是在绘图期间我在画布期间面临 System.OutOfMemoryException(图形可能超过屏幕大小的 3 倍)

我已将 Canvas 放置在 ScrollViewer 中。当我删除 ScrollViewer 时,问题不会发生,但即使我设置了属性,我也无法滚动 Canvas 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()绘制的位置,但即便如此,问题仍然存在。

4

1 回答 1

0

您可以使用较小的画布,而不是在可滚动的 div 中使用大画布来包含所有图形,最好是实际屏幕尺寸(不是图形)的最大值,然后使用平移画布并在平移位置重绘图形。

最好是因为如果你有一个巨大的画布并且只看到 25%,那么另外 75% 就是浪费内存。

通过将画布用作“窥视孔”并结合翻译,您将在屏幕上获得相同的结果(您可以一次看到 100% 的内容)并且您无需担心您的图形,因为这将是由画布自动裁剪。

如果愿意,您可以将翻译附加到鼠标/触摸拖动和移动操作或制作“虚拟”滚动条。

于 2013-07-04T21:17:16.360 回答