2

モデルに基づいてコントロールのリストを生成するために ItemsControl を使用しています。ビジュアル ツリーを見ると、レンダリングされた各コントロールが ContentPresenter にラップされていることに気付きました。追加されるコントロールはサード パーティ製のコントロールであり、兄弟である場合は各コントロール間にスプリッターを表示するように設計されています。これにより、ユーザーは各コントロールのサイズを変更できます。たとえば、次の例では、実行時に各コントロール間のスプリッターが表示されます。

<StackPanel>
<3rdPartyControl />
<3rdPartyControl />
<3rdPartyControl />
</StackPanel>

ItemsControl を使用する場合、各 3rdPartyControl は ContentPresenter にラップされるため、スプリッターは表示されません。この問題を解決するためにさまざまな方法を試しましたが、Xaml に依存するのではなく、各コントロールを追加するコードを書かない限り、これを機能させることができません。contentpresenter を完全に置き換える方法を知っている人はいますか (私の場合は 3rdpartyControl を使用)?

ありがとう

4

2 に答える 2

5

ContentPresenter を置き換えるために、ItemsControl から派生させ、GetContainerForItemOverrideメソッドをオーバーライドして特殊なコンテナー コントロールを作成することができます。

たとえば、ListBox はこのメソッドをオーバーライドして、新しい項目オブジェクトのコンテナーとして ListBoxItem を作成します。

于 2012-12-14T22:55:15.370 に答える
0

そうです、ItemsControl に追加するすべての要素は ContentPresenter でラップされます。詳細については、dr.wpf ItemsControl azのすばらしい一連の記事を参照してください。

試してみることをお勧めする 1 つの方法は、ItemsControl を ListBox に変更し、ListBox を ItemsControl のように動作させることです。この場合、ListBoxItem を再スタイル/再テンプレート化し、ContentPresenter をコントロールに置き換えることができます。また、選択サポートを停止する必要があります。変更する必要がある ListBox スタイルは次のとおりです

于 2012-12-14T22:58:26.413 に答える