2017-08-24 3 views
0

Je souhaite disposer d'un DataGrid avec une liste de chemins. Mais tous les chemins ne sont pas identiques. Je veux que l'utilisateur puisse distinguer quel chemin est inférieur ou supérieur.Couches de chemin C# WPF DataGrid

Je l'ai essayé en comptant la barre oblique inversée '\' et j'ajoute "-" pour chaque infront du nom. Ce n'était pas vraiment la solution mais pourrait être vu.

Existe-t-il un moyen de générer comme un arbre dans un DataGrid?

+0

Le contrôle TreeView ne fonctionnerait pas mieux pour atteindre cet objectif? – Isma

+0

@IsmaC. pas vraiment, car le dataGrid contient beaucoup plus d'informations en plus du chemin. Il tient comme le nom, la version et la date. Je veux juste que l'utilisateur puisse facilement voir, "oh c'est pas le même répertoire" –

+0

Le DataGrid craint pour ce genre de choses, j'ai posté une réponse mais il utilise le TreeView – Isma

Répondre

0

trouvé quelques exemples: http://dlaa.me/blog/post/9898803 et https://www.codeproject.com/Articles/30721/WPF-TreeListView-Control

Le premier semble mieux, il utilise une combinaison d'une présentation de la grille et un TreeView, le second utilise le contrôle de TreeListView:

<!-- Resources --> 
<Border.Resources> 
    <Style x:Key="TextBlockStyle" TargetType="{x:Type TextBlock}"> 
     <Setter Property="Margin" Value="3 0 3 0"/> 
    </Style> 
    <Style x:Key="TextBlockBoldStyle" TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockStyle}"> 
     <Setter Property="FontWeight" Value="Bold"/> 
    </Style> 
</Border.Resources> 

<!-- Content --> 
<Grid Grid.IsSharedSizeScope="True"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition/> 
    </Grid.RowDefinitions> 

    <!-- Column headers --> 
    <TreeViewItem Grid.Row="0" BorderThickness="1"> 
     <TreeViewItem.Header> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition SharedSizeGroup="Task"/> 
        <!-- Placeholders for two columns of ToggleButton --> 
        <ColumnDefinition SharedSizeGroup="Toggle"/> 
        <ColumnDefinition SharedSizeGroup="Toggle"/> 
        <ColumnDefinition SharedSizeGroup="Duration"/> 
        <ColumnDefinition SharedSizeGroup="Notes"/> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="Task" Style="{StaticResource TextBlockBoldStyle}"/> 
       <!-- Empty TreeViewItem to measure the size of its ToggleButton into the "Toggle" group--> 
       <TreeViewItem Grid.Column="1" Padding="0"/> 
       <TextBlock Grid.Column="3" Text="Duration" Style="{StaticResource TextBlockBoldStyle}"/> 
       <TextBlock Grid.Column="4" Text="Notes" Style="{StaticResource TextBlockBoldStyle}"/> 
      </Grid> 
     </TreeViewItem.Header> 
    </TreeViewItem> 

    <!-- Data rows --> 
    <TreeView Grid.Row="1" ItemsSource="{Binding SubItems}" BorderBrush="Gray" BorderThickness="0 1 0 0"> 
     <TreeView.ItemTemplate> 

      <!-- Level 0 template leaves space for 2 child "Toggle" levels --> 
      <HierarchicalDataTemplate ItemsSource="{Binding SubItems}"> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition SharedSizeGroup="Task"/> 
         <ColumnDefinition SharedSizeGroup="Toggle"/> 
         <ColumnDefinition SharedSizeGroup="Toggle"/> 
         <ColumnDefinition SharedSizeGroup="Duration"/> 
         <ColumnDefinition SharedSizeGroup="Notes"/> 
        </Grid.ColumnDefinitions> 
        <TextBlock Grid.Column="0" Text="{Binding Task}" Style="{StaticResource TextBlockStyle}"/> 
        <TextBlock Grid.Column="3" Text="{Binding Duration}" Style="{StaticResource TextBlockStyle}"/> 
        <TextBlock Grid.Column="4" Text="{Binding Notes}" Style="{StaticResource TextBlockStyle}"/> 
       </Grid> 

       <!-- Level 1 template leaves space for 1 child "Toggle" level --> 
       <HierarchicalDataTemplate.ItemTemplate> 
        <HierarchicalDataTemplate ItemsSource="{Binding SubItems}"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition SharedSizeGroup="Task"/> 
           <ColumnDefinition/> 
           <ColumnDefinition SharedSizeGroup="Toggle"/> 
           <ColumnDefinition SharedSizeGroup="Duration"/> 
           <ColumnDefinition SharedSizeGroup="Notes"/> 
          </Grid.ColumnDefinitions> 
          <TextBlock Grid.Column="0" Text="{Binding Task}" Style="{StaticResource TextBlockStyle}"/> 
          <TextBlock Grid.Column="3" Text="{Binding Duration}" Style="{StaticResource TextBlockStyle}"/> 
          <TextBlock Grid.Column="4" Text="{Binding Notes}" Style="{StaticResource TextBlockStyle}"/> 
         </Grid> 

         <!-- Level 2 template has no children --> 
         <HierarchicalDataTemplate.ItemTemplate> 
          <HierarchicalDataTemplate ItemsSource="{Binding SubItems}"> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition SharedSizeGroup="Task"/> 
             <ColumnDefinition/> 
             <ColumnDefinition/> 
             <ColumnDefinition SharedSizeGroup="Duration"/> 
             <ColumnDefinition SharedSizeGroup="Notes"/> 
            </Grid.ColumnDefinitions> 
            <TextBlock Grid.Column="0" Text="{Binding Task}" Style="{StaticResource TextBlockStyle}"/> 
            <TextBlock Grid.Column="3" Text="{Binding Duration}" Style="{StaticResource TextBlockStyle}"/> 
            <TextBlock Grid.Column="4" Text="{Binding Notes}" Style="{StaticResource TextBlockStyle}"/> 
           </Grid> 
          </HierarchicalDataTemplate> 
         </HierarchicalDataTemplate.ItemTemplate> 
        </HierarchicalDataTemplate> 
       </HierarchicalDataTemplate.ItemTemplate> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 
</Grid>