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