Bonjour

Je travaille sous WPF et je veux utiliser un TreeView pour afficher les dossiers d'une manière presque similaire à l'Explorateur Windows
J'affiche la TreeView avec les Items que je peux étendre ou non
mais j'aimerai aussi pourvoir aller directement à un noeud en utilisant du code, et je n'arrive pas à programmer cela
j'ai recherché comment faire sur le net mais les exemples fournis sont tellement complexes que je m'en sort pas
cela se passe dans la méthode : private void ExpandFolder(TreeView treeView1, string SelectedPath)
Pouvez-vous m'aider ? Merci d'avance

Je mets ci-dessous un exemple simplifié :

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
25
26
27
28
29
30
Xaml :

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="500">
    
    <Grid>
        <TreeView Height="296" HorizontalAlignment="Left" Margin="12,12,0,0" Name="treeView1" VerticalAlignment="Top" Width="341"
                  SelectedItemChanged="treeView1_SelectedItemChanged">
            <TreeView.Resources>
                <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="HeaderTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding}" Margin="5,0" />
                                </StackPanel>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </TreeView.Resources>            
        </TreeView>
        <Button Content="Afficher" Height="23" HorizontalAlignment="Left" Margin="368,12,0,0" Name="button1" VerticalAlignment="Top" Width="98" Click="button1_Click" />
        <Button Content="Aller au noeud" Height="23" HorizontalAlignment="Left" Margin="368,64,0,0" Name="button2" VerticalAlignment="Top" Width="98" Click="button2_Click" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,326,0,0" Name="textBox1" VerticalAlignment="Top" Width="454" />
    </Grid>
</Window>
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Code :

    public partial class MainWindow : Window
    {
        private object dummyNode = null;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            string SelectedImagePath = "";

            TreeView tree = (TreeView)sender;
            TreeViewItem temp = ((TreeViewItem)tree.SelectedItem);

            if (temp == null)
                return;

            string temp1 = "";
            string temp2 = "";

            while (true)
            {
                temp1 = temp.Header.ToString();

                if (temp1.Contains(@"\"))
                {
                    temp2 = "";
                }

                SelectedImagePath = temp1 + temp2 + SelectedImagePath;

                if (temp.Parent.GetType().Equals(typeof(TreeView)))
                {
                    break;
                }

                temp = ((TreeViewItem)temp.Parent);
                temp2 = @"\";
            }

            textBox1.Text = SelectedImagePath;
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            treeView1.Items.Clear();

            foreach (string s in Directory.GetLogicalDrives())
            {
                TreeViewItem item = new TreeViewItem();

                item.Header = s;
                item.Tag = s;
                item.FontWeight = FontWeights.Normal;
                item.Items.Add(dummyNode);
                item.Expanded += new RoutedEventHandler(folder_Expanded);
                treeView1.Items.Add(item);
            }
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            if (textBox1.Text != "")
                ExpandFolder(treeView1, textBox1.Text);
        }

        void folder_Expanded(object sender, RoutedEventArgs e)
        {
            TreeViewItem item = (TreeViewItem)sender;

            if (item.Items.Count == 1 && item.Items[0] == dummyNode)
            {
                item.Items.Clear();
                try
                {
                    foreach (string s in Directory.GetDirectories(item.Tag.ToString()))
                    {
                        TreeViewItem subitem = new TreeViewItem();
                        subitem.Header = s.Substring(s.LastIndexOf("\\") + 1);
                        subitem.Tag = s;
                        subitem.FontWeight = FontWeights.Normal;
                        subitem.Items.Add(dummyNode);
                        subitem.Expanded += new RoutedEventHandler(folder_Expanded);
                        item.Items.Add(subitem);
                    }
                }

                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void ExpandFolder(TreeView treeView1, string SelectedPath)
        {
            Console.WriteLine(SelectedPath);

            // ???
        }
    }