1

私は、いくつかの大きなキャンバスコントロール(幅が数千ピクセル)を互いに重ねて使用するアプリケーションに取り組んでいます。キャンバスコントロール自体は完全に非表示ですが、それぞれに多数のコントロール、主に画像が含まれています。

私の質問は、キャンバスに推奨される最大サイズはありますか、それとも純粋にメモリの問題ですか?また、Canvasのサイズを(0、0)に設定し、キャンバスの境界の外側でコントロールを適切にレンダリングできるという事実を利用する方がよいでしょうか。

ありがとう、

G

4

2 に答える 2

2

注意:Silverlightキャンバスの最大サイズは32767ポイントです。これは、UIElementsのサイズがWPFのように浮動小数点数として格納されるのではなく、32ビット量で16ビットがサイズの整数を形成し、16ビットがその浮動小数点部分を形成するためです。したがって、キャンバスがそれより大きくなく、大きくならないようにしてください。

大きくする必要がある解決策は、自分でスクロールしてオブジェクトを自分で配置することです。実際には、キャンバスを再作成しています。これは、WPF用語では仮想化と呼ばれます。

メモリ消費量は、キャンバスサイズに応じて大きくなることはありませんが、コントロールの数とそれらのコントロールの累積メモリサイズにのみ依存します。ただし、多数のWPFオブジェクトを使用する場合は、より多くの(たとえば、1000を超える)オブジェクトを使用すると、レイアウトフェーズにかなりの時間がかかります。それが問題になる場合は、自分で再度コーディングし、同じタイプの未使用のWPFオブジェクトのキャッシュを配置する必要があります(WPFオブジェクトの作成も非常に遅いため)。

于 2009-06-14T17:19:56.287 に答える
1

の内部についての私の理解からすると、Canvasより大きくするために追加のメモリは必要ありません。

ゼロ以外のサイズを持つことで最初に頭に浮かぶのCanvasは、コンテナのサイズを変更するときなどに役立つ、4 つのコーナーのいずれかに相対的にアイテムを配置できることです。

于 2008-10-27T21:32:11.747 に答える