2009-06-24 21 views
1

私はWPFとC#を使用しています。WPFを使用してスクロールエリアに何千ものコントロールを作成する最良の方法は何ですか?

私は問題があります。私はスクロール可能な領域に多くのバインド可能なテンプレートコントロールを作成する必要があります(すべて異なるタイプです)。たとえば、1000個のテキストボックス、1000個のドロップダウンリスト、および1000個のチェックボックス。

問題がすべて作成されると、実際には遅くなります。

問題は、多くのコントロールを遅れなくシンプルにすることが可能かどうか、解決策を探すべき方向は何か?私は、テンプレートを使用する能力、データバインディング、マウスクリックのような簡単なイベント処理を保存したいと思います。

P.S.私はたくさんのもの(幾何学のみのレンダリング、異なる基底クラスなど)を試みましたが、現時点では私のために働いている(私はまだ試していませんでした)唯一のアプローチは、現在のビューポートに収まるコントロールだけを作成し、スクロールのコントロールのこのリストを更新してください。

P.P.Sスクロール中にリスト項目を再利用するときにListBoxで使用される3.5 SP1の仕組みがあることは知っていますが、これらの項目はすべて異なる種類なのでここでは使用できません。

ありがとうございます。

答えて

1

まず、このタイプの要件の設計の根拠について質問します。グリッドや何らかのリスト(何も変わらないので、リストスタイルのアプローチはうまくいく)を除いて何千ものコントロールを持っていることは、あなたのユーザーにとって信じられないほど混乱することになります。基本的には、何千もの項目を持つ非自明で変化の強いインターフェースを強制しています。

言われていること

...

PPSは、私は、リスト項目をスクロール中に再利用されているが、このようなアプローチは、ここでは使用できない場合、リストボックスで使用されている3.5 SP1でのメカニズムがあることを知っているすべてのこれらのアイテム理由異なるタイプのものです。

これはおそらくあなたの最良のアプローチです。これは正常に動作するはずですが、リストボックスのメカニズムほど単純ではありません。コントロールを事前に作成することができます。現在のコンテナを満たすのに必要なコントロールをそれぞれ作成し、スクロールして適切なコントロールを適切な場所に再割り当てします。

本当に何千ものコントロールが必要な場合は、これが最適なオプションです。

+0

多くのデータバインディングを持つコントロールの数が少ないほど、他の方法よりも優れていることがわかりました。 FrameworkUIElementは非常に高価です。 – user7116

+0

@sixlettervariables:それは私がここで言っていたことです - リストボックスと同じように、スクロール中にコントロールの数を減らし、データバインディングを再割り当て(再利用)する方が良いでしょう。彼はスクロール中にさらに位置/レイアウトを追加するだけで済みます。 –

+0

問題は、そのコントロールには多くの種類があることです。 私は、問題をより理解しやすくするために、テキストボックスやその他のプリミティブについて述べました。 実際には、いくつかのテキストボックス、グラフィックプリミティブ、アニメーションなどを含むコントロールがあります。 再利用によるアプローチを使用する場合は、基本的なコントロールタイプをいくつか作成する必要があります。 –

2

〜3000のコントロールを1つの画面に表示することは問題であり、通常は間違った角度からGUIに近づいています。私はWPFであまり経験はありませんが、私のWinFormsの知識は、1000以上のコントロールインスタンスが問題を求めていることを私に伝えています。これは、ListBoxes、DataGrids、およびその他の表形式/リスト形式のコントロールが設計されたものです。

私はここで同様の問題に類似した答えを与えた:Super Slow C# Custom Control

をたぶん、あなたはあなたがここに誰かが正しい方向にあなたをプッシュすることができます実装しようとしているものを解決するのではなく、やろうとしているかを説明場合。

+0

実際に私はいくつかのdinamically更新されたスキーマを作成する必要があります。 内部状態に応じてアニメーションや視覚化が異なる多数のアイテムがあります。 たとえば、表示および/または編集するための多くのパラメータを備えた変圧器発電機などを備えた発電所の提示を想像してください。 –

関連する問題