WPF树形视图项目点击

5
我有一个WPF事件的问题。假设我有一个基础数据模型和一个树形视图来呈现数据。我最想做的简单事情是,当我单击一个项目时,我想对与该项关联的基础数据执行某些操作。
我尝试使用TextBlock的MouseLeftButtonDown事件,但是发送对象只是TextBlock本身,我无法访问底层数据。
现在我还尝试使用TreeViewItem的MouseLeftButtonDown事件,像这样:
<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
         <EventSetter Event="MouseLeftButtonDown" Handler="itemClicked"/>
    </Style>
</TreeView.ItemContainerStyle>

但是我没有得到被调用的处理程序。

那么我应该如何做呢?有没有什么标准方法?


使用SelectedItemChanged事件,注意键盘也会触发该事件。 - makc
@makc 感谢你的贡献!但是我不希望在选中项改变时调用处理程序,而是希望在用户双击该项时调用。 - Weixiang Guan
这不是你在问题中描述的内容,你尝试过MouseDoubleClick事件了吗? - makc
@makc虽然我没有尝试过MouseDoubleClick,但我阅读了相关文档。当用户在控件(树形视图)上双击时,它将被调用,发送者是树形视图而不是TreeViewItem。 - Weixiang Guan
@makc我已经成功实现了我想要的功能,我将原始帖子中Event的值更改为MouseDoubleClick,现在它可以工作了!我不确定为什么MouseLeftButtonDown不起作用,也许与路由事件有关。无论如何,我现在不再为下一个问题而苦恼,那就是如何获取与树视图项关联的基础数据。 - Weixiang Guan
显示剩余2条评论
1个回答

7

MouseLeftButtonDown事件是一种冒泡事件,它在其路由中的某个位置被处理,我猜测是Selector。您可以使用Snoop来查看谁处理了该事件。使用PreviewMouseLeftButtonDown / SelectedItemChanged或在您的情况下使用MouseDoubleClick将解决问题。

<TreeView>
  <TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="MouseDoubleClick"
                Handler="itemDoubleClicked"/>
    </Style>
  </TreeView.ItemContainerStyle>
</TreeView>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接