首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MouseDoubleClick出错了TreeViewItem

MouseDoubleClick出错了TreeViewItem
EN

Stack Overflow用户
提问于 2015-08-17 02:35:43
回答 1查看 158关注 0票数 0

这个很奇怪,除非我错过了一些基本的东西。

我已经通过TreeViewItemMouseDoubleClick事件通过ItemContainerStyle附加了一个事件处理程序。

代码语言:javascript
复制
<TreeView.ItemContainerStyle>
  <Style TargetType="TreeViewItem">
    <EventSetter Event="MouseDoubleClick" Handler="TreeViewItem_MouseDoubleClick" />
  </Style>
</TreeView.ItemContainerStyle>

下面是事件处理程序:

代码语言:javascript
复制
Private Sub TreeViewItem_MouseDoubleClick(sender As Object, e As MouseButtonEventArgs)

  If TypeOf sender Is TreeViewItem Then
    Dim TVI = DirectCast(sender, TreeViewItem)
    MsgBox(TVI.Header)
  End If
End Sub

问题是,MsgBox总是显示根节点的标题文本,而不是我双击的节点。我看不出有什么明显的错误。谁能给我指明正确的方向?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-17 03:08:38

是的,您缺少了关于TreeView的一个基本的奇怪的东西:)。我不知道如何在一篇文章中很容易地说明它,所以我会尝试解释它。TreeViewItem有子项。展开根TreeViewItem以显示子项时,所有这些子TreeViewItems都在父TreeViewItem的内部。因此,当您双击一个子TreeViewItem时,事件就会冒泡到最上面的项目。如果你看看e.OriginalSource,你会得到真正的物品.有点..。实际上,您将得到双击对象(例如,TextBlock)。您可以使用众所周知的GetVisualAncestor<T>()扩展方法来追踪到正确的TreeViewItem:

代码语言:javascript
复制
((FrameworkElement)e.OriginalSource).GetVisualAncestor<TreeViewItem>()

是啊,很丑:).

这里有一个指向C#实现的链接,您必须为自己找到一个VB版本:),但是它的移植非常简单。

https://code.google.com/p/gong-wpf-dragdrop/source/browse/branches/jon/GongSolutions.Wpf.DragDrop/Utilities/VisualTreeExtensions.cs?r=29

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32042026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档