2

ItemsControl を継承するコントロールを作成しましたが、作成したコントロールには、そのテンプレートの ItemsPresenter がありません。代わりに、グリッドがあります。次のようなリストを作りたいです。


(項目1)


(グリッドスプリッター)


(項目 2)


(グリッドスプリッター)


(項目3)


アイテム間に独自の GridSplitter を挿入する必要があるため、ItemsPresenter を使用して UI に入力させることはできません。

OnItemsChanged() メソッドをオーバーライドして、GridSplitter を追加/削除するロジックを記述できるようにします。ただし、ItemContainerGenerator クラスを使用して、Items の ItemTemplate を生成する必要があります。

しかし、コントロール テンプレートに ItemsPresenter がない場合、ItemContainerGenerator は機能していないようです。初めてアイテムを生成するために使用すると、DataTemplate を含む ContentPresenter が返されます。次に、私が持っているグリッドに挿入しました。ただし、画面にはアイテムが表示されません。別のアイテムを追加すると、グリッドに挿入するときにエラーがスローされ、そのアイテムが既にビジュアル ツリーにあるというメッセージが表示されます。それが、ItemContainerGenerator が ItemsPresenter なしでは機能しないと私が考える理由です。

そこで、Grid を ItemsPresenter に置き換えようとしました。今回は、下線ロジックを使用してアイテムを作成し、想定どおりに表示しました。しかし、それは私が望むものではありません。

ItemContainerGenerator を使用する理由は、Xaml で定義した ItemTemplate から UI 要素を作成する必要があるためです。

項目のコントロールの ItemTemplate を使用して UI を生成する方法はありますか?

4

1 に答える 1

0

OnItemsChangedをリッスンしてコンテンツをグリッドに手動で追加するという問題がすでに発生している場合は、ItemTemplateを使用する代わりに、UserControlを作成してから、該当するオブジェクトに設定されたDataContextを使用してUserControlを挿入する必要があります。グリッドであり、ItemsControlからの継承について心配する必要はありません。

于 2011-05-31T19:11:17.693 に答える