wpf - 树视图项目不展开
问题描述
我正在为我的公司开发一个 WPF 应用程序,并且一切都需要与我们公司的外观相同。因此,我必须制作一个自定义文件夹资源管理器,它将具有当前目录的树视图。
为了使它更容易,我制作了以下类,它基本上是一个TreeViewItem
存储 aDirectoryInfo
并在展开时自动浏览子文件夹(而不是一次浏览所有内容并使软件更快)。这是我的代码:
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
我已经稍微调试了我的代码,它正确地创建了不同的项目。
任何人都可以帮助我吗?提前致谢。
解决方案
There is a simple way to solve this problem and that is to Override the OnExpanded Sub on the Base TreeViewItem class instead of implementing your own Expanded method. Then in the end you execute MyBase.OnExpanded(e) method which seems to contain the correct update events to send out to whomever listens. In this case your 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
推荐阅读
- php - 为 wordpress 主题创建 CMS
- azure - 使用 Artifacts 创建 Azure 构建管道
- oracle - 如何在过程中创建用户定义的异常?
- xml-parsing - 在 PDI 中,即使不存在子元素,如何解析 XML 以获取父元素行?
- python - Python 中最紧凑的类 JS 线程模型?
- php - 在 iframe 中运行 Laravel Web App 时出现错误 419 Session Expired
- svelte - Sveltstrap 中的表单验证
- go - Go 中的预处理器指令与 C 中的一样
- python - 如何左对齐数据框
- powershell - 如何使用正确解析的参数从 powershell 启动新的 powershell 窗口