2012-12-21 78 views
2

我在我的DataGrid中有一個Expander,但我只想顯示兩個項目,然後當用戶單擊展開時,顯示剩餘的項目。wpf datagrid擴展器顯示x項目

如何做到這一點?

<DataGrid.GroupStyle> 
    <GroupStyle AlternationCount="7" > 
     <GroupStyle.ContainerStyle> 
      <Style TargetType="{x:Type GroupItem}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type GroupItem}"> 
          <Expander IsExpanded="False" Background="{Binding XPath=recipient_color}">            
           <Expander.Header> 
            <Label Content="{Binding}"> 
            </Label>             
           </Expander.Header> 
           <Expander.Content> 
            <ItemsPresenter/> 
           </Expander.Content> 
          </Expander> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </GroupStyle.ContainerStyle> 
    </GroupStyle> 
</DataGrid.GroupStyle> 

回答

0

另一種做法是要修改Expander控件模板,但這需要更多的xaml操作。在MSDN的控制模板中,您可以看到名爲ContentRow的網格行。該行的高度從0開始,然後IsExpanded屬性上的觸發器將其展開至所需的高度。如果您將默認高度設置爲50(或需要顯示所需項目數量的任何高度),則會在展開器摺疊時顯示組項目的頂部。

您可以閱讀更多關於如何修改ControlTemplates here

+0

你可以舉一個例子如何實現? – keno

+0

@keno基本上所有你需要做的就是從我給你的鏈接(包括底部的資源)複製所有的xaml並將其轉儲到你的DataGrid.Resources中。然後將ContentRow的高度從0改爲任何值。問題是模板可能與您當前的主題不匹配,並且很難找到正確的起始模板。但它值得一試。 – Jelly

+0

Hahahahaha IT WORKED !!!! :D它確實與原始模板不一樣(標題的背面顏色是藍色/紫色等)。但我會改變這個mannualy;)謝謝! – keno

0
  1. 在你擴展的頭,添加你所選擇的控制,它能夠顯示您的列表的第2項。
  2. 將上述控件的可見性綁定到擴展器的「IsExpanded」屬性,以便擴展器展開時隱藏控件(使用IValueConverter)
  3. 構建擴展器的內容以顯示所有項目。

這樣,當擴展器未展開時,它將顯示標題中的2個項目(根據自己的喜好來設置樣式)。當用戶擴展時,2個項目消失,擴展器展開,整個列表再次顯示。

祝你好運!

+0

謝謝!好主意;)但是如何從我的xml數據中選擇第一項......我可以將設置到我的標題中的一個堆棧面板中,但是顯示所有項目......並且手動更改高度並不是解決方案因爲無論如何都會將數據加載到頭文件中:-) – keno

+0

我不知道您的代碼是如何設置的,但是您可以創建與您在代碼後面管理的2個項目集合不同的綁定 - 或者它也可能通過一個IValueConverter來實現(以一個集合作爲輸入,如果它們存在,只輸出前兩個項目)。但我很高興你找到了一個解決方案:) – Joe