Treeview 项目不展开

Treeview items don't expand

我正在为我的公司开发一个 WPF 应用程序,所有内容都需要以与我们公司的外观相对应的相同方式显示。因此,我必须制作一个自定义文件夹资源管理器,它将以当前目录的树视图为特色。

为了方便起见,我做了以下 class,它基本上是一个 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

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

任何人都可以帮助我吗?提前致谢。

有一个简单的方法可以解决这个问题,那就是重写 Base TreeViewItem 上的 OnExpanded Sub class 而不是实现您自己的 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