WPF treeview如何处理树视图中的鼠标点击而不是树视图上的鼠标点击?

时间:2013-08-14 23:49:07

标签: c# wpf xaml treeview

我想知道如何解决这个问题。我不能很好地检查鼠标是否超过item1,item2,....,我可以吗?应该有一些更好的方法来做到这一点。我只是想在用户点击非项目空间时取消选择所有项目。

1 个答案:

答案 0 :(得分:1)

您可以在Click处理程序中执行您想要的操作,添加以下代码:

HitTestResult hitTestResult = VisualTreeHelper.HitTest(uiElement, DragStartPosition);
TreeViewItem listBoxItem = hitTestResult.VisualHit.GetParentOfType<TreeViewItem>();
if (listBoxItem == null) 
{
    // user has clicked, but not on a TreeViewItem
}

GetParentOfType方法是我创建的扩展方法,如下所示:

public static T GetParentOfType<T>(this DependencyObject element) where T : DependencyObject
{
    Type type = typeof(T);
    if (element == null) return null;
    DependencyObject parent = VisualTreeHelper.GetParent(element);
    if (parent == null && ((FrameworkElement)element).Parent is DependencyObject) 
parent = ((FrameworkElement)element).Parent;
    if (parent == null) return null;
    else if (parent.GetType() == type || parent.GetType().IsSubclassOf(type)) 
return parent as T;
    return GetParentOfType<T>(parent);
}

请注意,extension methods需要放入static课程...如果您愿意,可以随时将其重构为常规方法。