WPF TreeView,在PreviewMouseDown事件中获取TreeViewItem

syn*_*tic 3 wpf treeview mouseevent

如何确定在PreviewMouseDown事件中单击的TreeViewItem?

syn*_*tic 8

以下似乎有效:

private void myTreeView_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
  TreeViewItem item = GetTreeViewItemClicked((FrameworkElement)e.OriginalSource, 
                                                                       myTreeView);
  ...
}

private TreeViewItem GetTreeViewItemClicked(FrameworkElement sender, TreeView treeView)
{
  Point p = ((sender as FrameworkElement)).TranslatePoint(new Point(0, 0), treeView);
  DependencyObject obj = treeView.InputHitTest(p) as DependencyObject;
  while (obj != null && !(obj is TreeViewItem))
    obj = VisualTreeHelper.GetParent(obj);
  return obj as TreeViewItem;
}
Run Code Online (Sandbox Code Playgroud)