2010-09-24 51 views
6

我有我在WPF中編寫的自定義用戶控件來顯示一些數據。我想在列表中顯示此用戶控件,但我也想提供多個列標題(匹配用戶cotrol上的某些屬性),以便用戶可以對包含在usercontrol中的屬性進行排序。跨度WPF Grid/List中的多列的最佳方式?

我不確定最好的方法去做這件事。

我目前有一個列表框顯示這些用戶控件,但列表框沒有標題,我不知道如何將多個標題放在列表框中。

理想情況下,我想是這樣的:

Header1 Header2 Header3 Header4 
[UserControlThatSpansAllFourColumns] 

我其他的想法是使用一個DataGrid和某種方式得到每個項目跨越多列,但到目前爲止,我不明白這一點無論是。

如果有人有任何提示,我會歡迎他們!

回答

3

好吧,這不是「最好的方式」,但我只是把它扔進去。一種像你需要的方式工作的方式是使用帶有自定義ItemContainerStyle的ListView,而不是使用<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定義的列。所以我猜想讓這個工作更好的一種方法是提供你自己的<RowPresenter>實現,它實際上考慮了父列表視圖中定義的GridViewColumns。

無論如何,希望這有助於某種程度。

+0

非常感謝!這基本上是我所期待的。我用自定義UserControl替換了ContentPresenter,它工作。有點排序魔法,我會有一個完整的解決方案。 – 2010-09-27 14:57:14

+0

這是有用的謝謝你,請你讓我知道我們如何能夠保持幾列,並只合並特定列? – robot 2017-05-26 13:22:27