1

私はWPFとC#を使用しています。

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

問題は、それらがすべて作成されると、動作が非常に遅くなることです。

問題は、非常に多くのコントロールを遅延なしで同時に持つことが可能かどうか、そして解決策をどの方向に探せばよいかということです。テンプレート、データバインディング、およびマウスクリックなどの単純なイベント処理を使用する機能を保存したいと思います。

PS私は多くのことを試しました(ジオメトリのみのレンダリング、さまざまな基本クラスなど)が、現在私にとって機能していると思われる唯一のアプローチ(まだ試していません)は、現在のビューポートに収まるコントロールのみを作成することですスクロールに関するコントロールのこのリストを更新します。

PPS 3.5 SP1 には、スクロール中にリスト項目が再利用されるときに ListBox で使用されるメカニズムがあることを知っていますが、これらの項目はすべて異なるタイプであるため、ここではそのようなアプローチを使用できません。

どうもありがとう。

4

2 に答える 2

2

1 つの画面に最大 3000 個のコントロールが必要であるという事実は問題であり、通常、GUI に間違った角度からアプローチしていることを示しています。私は WPF の経験があまりありませんが、WinForms の知識から、1000 以上のコントロール インスタンスが単に問題を引き起こしていることがわかっています。これは、ListBoxes、DataGrids、およびその他の表形式/リスト形式のコントロールが設計されたものです。

ここで同様の問題に対して同様の回答をしました:Super Slow C# Custom Control

おそらく、ここで誰かを実装しようとしているソリューションの代わりに、何をしようとしているのかを説明すると、正しい方向に進むことができます。

于 2009-06-24T16:40:46.107 に答える
1

まず、このタイプの要件の設計上の論理的根拠に疑問を投げかけます。ある種のグリッドまたはリスト (すべて一定で変化しないため、リスト スタイルのアプローチがうまく機能する場合) を除いて、何千ものコントロールを使用すると、ユーザーは非常に混乱することになります。基本的に、何千ものアイテムを使用して、明白ではない変化するインターフェースを強制しています。

そうは言っても…

PPS 3.5 SP1 には、スクロール中にリスト項目が再利用されるときに ListBox で使用されるメカニズムがあることを知っていますが、これらの項目はすべて異なるタイプであるため、ここではそのようなアプローチを使用できません。

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

何千ものコントロールが本当に必要な場合は、これがおそらく最良の選択肢です。

于 2009-06-24T16:39:57.417 に答える