Bonjour,
Je cherche à afficher la structure suivante dans un treeview WPF :
Je veux afficher le nom des category dans un certain style et le nom des item dans un autre style.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <Root> <Category> <Name>category 1</Name> <Item> <Name>item 1</Name> </Item> <Item> <Name>item 2</Name> </Item> <Category> <Name>category 1.1</Name> <Item> <Name>item 1</Name> </Item> </Category> </Category> <Category> <Name>category 2</Name> <Item> <Name>item 1</Name> </Item> </Category> </Root>
Cet xml étant stocké dans un XDocument, j'utilise un HierarchicalDataTemplate pour décrire comment doivent s'afficher mes données dans le treeview. Voici le code XAML que j'ai écrit :
Mon problème est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <Window.Resources> <HierarchicalDataTemplate DataType="Category" ItemsSource="{Binding Path=Elements[Item]}"> <TextBlock FontWeight="Bold" FontSize="20" Background="Red" Text="{Binding Path=Element[Name].Value}" /> </HierarchicalDataTemplate> <DataTemplate DataType="Item"> <TextBlock FontStyle="Italic" Text="{Binding Path=Element[Name].Value}" /> </DataTemplate> </Window.Resources> <Grid> <TreeView Margin="24,21,60,30" Name="treeView1" ItemsSource="{Binding Path=Root.Elements[Category]}" /> </Grid>
De cette façon, le treeview n'affiche pas la "category 1.1". Normal car le path de la propriété ItemsSource du HierarchicalDataTemplate ne sélectionne que les éléments "Item". Si je le définie avec la valeur Elements, alors, les éléments <Name>...</Name> seront affichés tels quels dans le treeview. Je peux à la limite les masquer avec un dataTemplate, mais il restera toujours une ligne blanche. Il semble par ailleurs que l'on ne puisse pas séléctioner les éléments dont le nom est contenus dans une liste de valeur.
Comment feriez-vous alors pour afficher ce type de hiérarchie ou il peut y avoir plusieurs type d'élément à un même niveau ?
Merci d'avance pour votre aide,
mathmax
Partager