Treeview项不会展开

问题描述 投票:0回答:1

我正在为我的公司开发WPF应用程序,并且所有内容的外观都应与公司的外观相同。因此,我必须创建一个自定义文件夹浏览器,该浏览器将具有当前目录的树状视图。

为了使其更容易,我制作了以下类,该类基本上是一个TreeViewItem,它存储DirectoryInfo并在展开时自动浏览子文件夹(而不是一次性浏览所有内容并加快软件速度)。这是我的代码:

Private Class TreeViewPlus
    Inherits TreeViewItem
    Public dir As IO.DirectoryInfo

    Public Sub New()
    End Sub

    Public Sub New(dir As DirectoryInfo)
        Me.dir = dir
        Try
            If Not dir.EnumerateDirectories Is Nothing Then   'If there are subdirectories, I add an empty item to enable the expansion
                Me.Items.Add(New TreeViewPlus)
            End If
        Catch ex As Exception
        End Try
    End Sub

    Private Sub TreeViewPlus_Expanded(sender As Object, e As RoutedEventArgs) Handles Me.Expanded

        Me.Items.Clear()

        Try
            For Each folder In dir.EnumerateDirectories()
                Dim item As TreeViewPlus = New TreeViewPlus(folder)
                item.Name = Text.RegularExpressions.Regex.Replace(folder.FullName, "[^a-zA-Z0-9]", "")
                item.Header = folder.Name
                Me.Items.Add(item)
            Next
        Catch ex As Exception
        End Try

    End Sub
End Class

这是我初始化第一个目录的代码:(TRV_Arbre是我的TreeView的名称)

Sub New()
...
    For Each Drive As IO.DriveInfo In IO.DriveInfo.GetDrives
        Dim item As TreeViewPlus = New TreeViewPlus(Drive.RootDirectory)
        item.Header = Drive.Name
        TRV_Arbre.Items.Add(item)
    Next
...
End Sub

我遇到的问题是项目的第一级正确展开,但随后的项没有正确展开。

查看此处:https://youtu.be/E6BJbKal5Sk

我已经调试了一点代码,它正确地创建了不同的项目。

有人可以帮我吗?预先感谢。

wpf vb.net treeview treeviewitem
1个回答
0
投票

有一个简单的方法可以解决此问题,那就是重写Base TreeViewItem类上的OnExpanded Sub,而不是实现自己的Expanded方法。然后最后执行MyBase.OnExpanded(e)方法,该方法似乎包含正确的更新事件以发送给任何听众。在这种情况下,您的TreeView。

 Protected Overrides Sub OnExpanded(e As RoutedEventArgs)
    Me.Items.Clear()

    Try
        For Each folder In dir.EnumerateDirectories()
            Dim item As TreeViewPlus = New TreeViewPlus(folder)
            item.Name = Text.RegularExpressions.Regex.Replace(folder.FullName, "[^a-zA-Z0-9]", "")
            item.Header = folder.Name
            Me.Items.Add(item)
        Next
    Catch ex As Exception
    End Try
    MyBase.OnExpanded(e)
End Sub 
© www.soinside.com 2019 - 2024. All rights reserved.