从右键菜单中选择展开或闭合该节点的选项时,treeview.SelectedItem是所绑定的数据源的元素。所以需要使右键点击弹出菜单的同时该节点为选中状态,并获取该节点为全局变量selectedTreeViewItem,在点击右键菜单选项时,设置selectedTreeViewItem 的IsExpanded 属性即可展开或闭合该节点。
'右键点击时选中的节点
Dim selectedTreeViewItem As TreeViewItem
'使右键点击弹出菜单的同时该节点为选中状态
Private Sub tvProperties_PreviewMouseRightButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
selectedTreeViewItem = TryCast(VisualUpwardSearch(Of TreeViewItem)(TryCast(e.OriginalSource, DependencyObject)), TreeViewItem)
If selectedTreeViewItem IsNot Nothing Then
selectedTreeViewItem.Focus()
e.Handled = True
End If
End Sub
Private Shared Function VisualUpwardSearch(Of T)(source As DependencyObject) As DependencyObject
While source IsNot Nothing AndAlso source.[GetType]() <> GetType(T)
source = Media.VisualTreeHelper.GetParent(source)
End While
Return source
End Function
Private Sub ExpandBranch_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
If Not selectedTreeViewItem.IsExpanded Then
selectedTreeViewItem.IsExpanded = True
End If
End Sub
Private Sub CollapseBranch_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
If selectedTreeViewItem.IsExpanded Then
selectedTreeViewItem.IsExpanded = False
End If
End Sub