WPFグリッド/リストで複数の列を渡す最良の方法は?
-
05-10-2019 - |
質問
いくつかのデータを表示するためにWPFで書いたカスタムユーザーコントロールがあります。このusercontrolをリストに表示したいのですが、ユーザーがusercontrolに含まれるプロパティをソートできるように、複数の列ヘッダー(ユーザーコトロールの一部のプロパティを一致させる)も提供したいと思います。
これを行うための最良の方法はわかりません。
現在、これらのユーザーコントロールを表示するリストボックスがありますが、リストボックスにはヘッダーがなく、リストボックスに複数のヘッダーを配置する方法がわかりません。
理想的には、このようなものが欲しい:
Header1 Header2 Header3 Header4
[UserControlThatSpansAllFourColumns]
私のもう1つの考えは、データグリッドを使用して、どういうわけか各アイテムを複数の列に渡すことでしたが、これまでもそれを理解することはできません。
誰かがヒントを持っているなら、私は彼らを歓迎します!
解決
わかりました、これはいずれにしても「最良の方法」ではありませんが、私はこれを投げるだけです。 <ContentPresenter>
デフォルトの代わりに <GridViewRowPresenter>
. 。この短いXAMLはこれをやや示しています:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<ContentPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="Header1"/>
<GridViewColumn Header="Header2"/>
</GridView>
</ListView.View>
<Button>Item1</Button>
<Button>Item2</Button>
</ListView>
ここでは、列ヘッダーを取得し、アイテムはListView全体にまたがっています。ただし、このソリューションでは、アイテムのレンダリングは独自の世界にあります。 ListViewで定義された列に実際には接続されていません。ですから、この仕事をより良くする方法の1つは、あなた自身を提供することだと思います <RowPresenter>
Parent ListViewで定義されているGridViewColumnsを実際に考慮した実装。
とにかく、これがどういうわけか役立つことを願っています。