我想知道我将如何处理这件事。我不能很好地检查鼠标是否不在 item1、item2、.... 上,可以吗?应该有一些更好的方法来做到这一点。如果用户单击非项目空间,我只想取消选择所有项目。
问问题
1006 次
1 回答
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);
}
请注意,扩展方法需要放入一个static
类中......如果您愿意,您可以随时将其重构为普通方法。
于 2013-08-15T13:11:33.707 回答