我对WPF中的事件有疑问。假设我有一个基础数据模型和一个用于显示数据的树形 View 。我想做的最简单的事情是,当我单击一个项目时,我将使用与该项目相关联的基础数据来做某事。

我尝试使用MouseLeftButtonDownTextblock事件,但发送方对象只是Textblock本身,因此无法访问基础数据。

现在,我还尝试使用MouseLeftButtonDownTreeViewItem事件,如下所示:

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

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

那么我应该怎么做呢?有某种标准方法吗?

最佳答案

MouseLeftButtonDown事件是一个冒泡事件,在我的猜测选择器的路由中得到了处理。
您可以使用snoop查看事件的处理者。
使用PreviewMouseLeftButtonDown/SelectedItemChanged或在您的情况下使用MouseDoubleClick可以解决此问题。

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

关于WPF TreeView项目已单击,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16584627/

10-11 06:37