1

私はそのような状況を持っています - タイムラインコントロールを構築したいです。だから私はそれに UserControl と ItemsControl を持っています (すべての行は何人かの人を表します)。ItemsControl には、ItemsControl.ItemTemplate として別の ItemsControl が含まれています。たとえば、イベントの日付で並べられた人物のイベントが表示されます。

したがって、日付を列ヘッダーとして、たとえば人を行ヘッダーとして持つある種のグリッドのように見えます。...................|. 2010.01.01 ..... 2010.01.02 ..... 2010.01.03
アダム・スミス....|......[何らかのイベント#1].....[何らかのイベント#2]. .....

ジョン・ダウ.......|...[なんらかのイベント#3].....[なんらかのイベント#4]........

多くの人 (ItemsControl #1 - 100-200 アイテム) と、ある日までに発生した多くのイベント (1 日に 1 人あたり 1-10-30 イベント) を持つことができます。

問題は、ユーザーが ItemsControl #1/#2 をスクロールすると、一度に多くの要素をレンダリングする必要があるため、あまりにも遅いことが発生したことです (たとえば、特定のイベントの説明にテキスト ボックスやその他の要素が少しあるため)。

質問 1 - どうすれば改善できますか? そのようなユーザーコントロールを構築するためのより良い方法を誰かが知っているでしょうか? インターネットのどこかで見つかったカスタム仮想パネルの実装に基づいて、カスタム仮想パネルを使用していることに言及する必要があります...

質問 2 - WriteableBitmap を使用して画像を作成し、データ バインド コントロールを画像にレンダリングして、多数の要素ではなく画像を表示したいと考えています。問題は、非表示のデータ バインド コントロール (コード ビハインドで作成) をレンダリングしようとしていて、Dispatcher.BeginInvoke(() => {.. .}アプローチどうすれば解決できますか?

助けてくれてどうもありがとう!

4

1 に答える 1

2

質問 1 について: Nested ItemsControl の仮想化は扱いにくいものです。問題は、最も外側のコントロールが仮想化をサポートしている場合でも、内側のコントロールが無限の長さで測定されるため、すべての子がインスタンス化されることです。ItemsControl を別の内部でホストする代わりに、スタイリングを使用して階層をシミュレートし、すべてのデータを同じリストにマージします。または、ネストされた仮想化をサポートする市販のデータグリッド コントロールを見つけてください。

于 2010-04-29T02:39:18.577 に答える