2010-05-07 62 views
3

我對WPF比較陌生,所以我對Styles和setter有所瞭解,但是我在這方面遇到了麻煩。如何在具有多個級別的WPF數據網格中顯示分組?

我正在使用WPF數據網格,並且需要顯示多個級別的分組。我希望第二和第三組級別比頂級更加縮進。

下面的代碼將顯示組級別,但是它顯示它們一個在另一個之上,並且使得它們嵌套的組級別無法分辨。

<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type GroupItem}"> 
        <Expander IsExpanded="True"> 
         <Expander.Header> 
          <TextBlock Text="{Binding Path=Name}"/> 
         </Expander.Header> 
         <ItemsPresenter /> 
        </Expander> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

我怎樣才能組頭縮進基於水平?

+0

您正在使用的ICollectionView做分組? – Stephan 2010-05-07 20:12:51

+0

是的,我正在使用ICollectionView來執行分組。 – Keith 2010-05-07 20:57:24

回答

0

我已經使用ICollectionView和PropertyGroupDescription來添加分組,但是,您仍然必須使用XAML來描述如何顯示分組,否則您將無法獲得任何分組的UI指示。

我感興趣的是如何設置的XAML,這樣我可以代表多級分組,最好用某種每組水平或類似的東西壓痕....

1

據我所知(或上次檢查),WPF Datagrid不支持分層分組。

我能找到的最接近的是this。我們在應用中使用了Xceed DataGrid。不幸的是,它不是免費的,所以可能不適合你。

1

我有同樣的問題,並發現一個不完善的解決方法。如果您在ItemsPresenter左側添加邊距,則每個級別都會按照您的預期進行縮進。不幸的是,列標題不再與內容列對齊。我仍然在尋找一個修補程序...

3

萬一來自未來的人遇到這種情況。我能夠嵌套組並對它們進行樣式設置,以便通過執行以下操作使它們不會堆疊在一起。

添加屬性到CollectionViewSource:在DataGrid XAML

<Window.Resources> 
    <CollectionViewSource x:Key="cvs" Source="{Binding TestData}"> 
     <CollectionViewSource.GroupDescriptions> 
      <PropertyGroupDescription PropertyName="TopProperty"/> 
      <PropertyGroupDescription PropertyName="SubProperty"/> 
     </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 
</Window.Resources> 

然後,你必須指定2個GroupStyles,而第二個將用於嵌套組。我向第二組的StackPanel添加了邊距,以便將文本向右推,使其看起來像在適當的列中。

<DataGrid.GroupStyle> 
      <GroupStyle> 
       <GroupStyle.ContainerStyle> 
        <Style TargetType="{x:Type GroupItem}"> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type GroupItem}"> 
            <StackPanel> 
             <Border Background="#FF959595" BorderBrush="#FF727272" BorderThickness="0,0,0,1" Margin="5,0,0,0">            
              <StackPanel Height="23" Orientation="Horizontal" Margin="3,0,0,0" Background="#FFE6E6E6"> 
               <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" Margin="5,0,0,0" Width="100" VerticalAlignment="Center"/> 
              </StackPanel> 
             </Border> 
              <ItemsPresenter /> 
            </StackPanel> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </GroupStyle.ContainerStyle> 
      </GroupStyle> 
      <GroupStyle> 
       <GroupStyle.HeaderTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <Border Background="#FF959595" BorderBrush="#FF727272" BorderThickness="0,0,0,1" Margin="5,0,0,0"> 
           <StackPanel Height="23" Orientation="Horizontal" Margin="3,0,0,0" Background="#FFF3F3F3"> 
            <TextBlock FontWeight="Bold" Text="{Binding Path=Name}" Margin="55,0,0,0" Width="100" VerticalAlignment="Center"/> 
           </StackPanel> 
          </Border> 
         </StackPanel> 
        </DataTemplate> 
       </GroupStyle.HeaderTemplate> 
      </GroupStyle> 
</DataGrid.GroupStyle> 

我能找到更多關於這個在這裏: https://msdn.microsoft.com/en-us/library/ff407126%28v=vs.110%29.aspx

相關問題