【问题标题】:Treeview items don't expand树视图项目不展开
【发布时间】:2020-04-02 10:30:09
【问题描述】:

我正在为我的公司开发 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】:

    有一个简单的方法可以解决这个问题,那就是重写 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 
    

    【讨论】:

      猜你喜欢
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多