Affichage treeviewitem comme des lignes de la grille dans wpf
Essentiellement dans le besoin afin de parvenir à quelque chose comme ceci en utilisant le contrôle treeview dans wpf: (random image)
http://blogs.msdn.com/blogfiles/delay/SimpleTreeGridUX.png
Où les nœuds et les nœuds enfants ont les mêmes en-têtes.
J'ai googlé beaucoup, mais mes connaissances en wpf pas bon.
Voici mon nœud parent de la classe:
public class Parent : PropertyChangedBase
{
public string ParentName { get; set; }
public BindableCollection<Child> Children { get; set; }
}
Et de l'enfant:
public class Child : PropertyChangedBase
{
public string ChildName { get; set; }
}
Mon xaml arborescence:
<TreeView Grid.Row="0" Grid.Column="0" ItemsSource="{Binding Nodes}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type projectModels:Parent}" ItemsSource="{Binding Children}">
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="2"></CheckBox>
<TextBlock Grid.Column="1" Text="{Binding ParentName}">
</TextBlock>
</Grid>
</StackPanel>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type projectModels:Child}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ChildName}"></TextBlock>
</StackPanel>
</DataTemplate>
</TreeView.Resources>
</TreeView>
J'ai essayé d'utiliser Grid
mais évidemment il créer des grilles différentes, donc je ne peux relais sur la largeur de la colonne.
J'ai essayé Comment faire gridview un élément enfant d'un treeview en application wpf , mais ils utilisent ListView
. Ce n'est pas une option pour moi, comme treeviewitem fonctionnalité de sélection est étroitement couplé avec mon treeview et le code derrière.
Des idées comment cela peut être fait? Merci.
- A votre <Grid> code du travail, autre qu'un problème avec les largeurs de colonne étant différente dans chaque article?
- Ouais, ça marche, mais pas dans la façon dont j'en ai besoin pour faire. J'ai besoin commun les en-têtes pour l'arborescence des sous-nœuds. Donc, je peux les redimensionner tous, et les nœuds' a été le même.
Vous devez vous connecter pour publier un commentaire.
Essayer cette
xaml
de code c#
Résultat
Si le seul problème avec votre code, c'est que chaque arborescence de l'élément de rendu avec grille différente des largeurs de colonne, vous pouvez essayer le "partage de la taille de portée" pour les aligner tous. Dans le contrôle TreeView, ensemble
Grid.IsSharedSizeScope
de vrai:-Puis ajouter un
SharedSizeGroup
à laColumnDefinition
s que doit avoir la même largeur à travers toute l'arborescence des éléments (votre première définition de la colonne a une largeur fixe de toute façon, il n'est donc pas nécessaire sur que):-Les valeurs sont simplement des chaînes de caractères utilisée pour le "nom" de l'colonnes, et peut être quelque chose que vous aimez.