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.CollectしてみCanvas.Children.Clear()ましたが、それでも問題は解決しません。

4

1 に答える 1

0

スクロール可能な div 内に大きなキャンバスを使用してすべてのグラフィックスを含める代わりに、実際の画面サイズ (グラフィックスではない) の最大値である小さなキャンバスを使用してから、キャンバスを翻訳し、翻訳された位置でグラフィックスを再描画します。

巨大なキャンバスがあり、そのうちの 25% しか表示されない場合、残りの 75% はメモリが無駄になるため、最適です。

キャンバスを翻訳と組み合わせた「のぞき穴」として使用することで、画面上で同じ結果が得られ (一度に表示できるものの 100% が表示されます)、グラフィックについて心配する必要はありません。キャンバスによって自動的にクリッピングされます。

マウス/タッチのドラッグ アンド ムーブ操作に翻訳を追加したり、必要に応じて「仮想」スクロール バーを作成したりできます。

于 2013-07-04T21:17:16.360 に答える