双击DataGrid时,我需要我的应用程序执行某个操作。如果双击滚动条,则不应执行该操作。所以我试着看看是什么被双击:
private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
Point p = Mouse.GetPosition(this.DataGrid1);
IInputElement ie = this.DataGrid1.InputHitTest(p);
}
但是当我双击滚动条时,IInputElement似乎是所有类型的东西: Microsoft.Windows.Themes.ScrollChrome或System.Windows.Shapes.Rectangle。所以我不确定是否点击了滚动条。
那么如何检查我是否真的双击滚动条?
答案 0 :(得分:4)
此处无需使用点击测试,只需通过遍历可视树检查e.OriginalSource
是否具有ScrollBar
类型的父级。这种方法存在一个潜在的问题 - 必须加载您的UI元素,这通常是处理鼠标事件时的情况。 Heres'检查UIElement是否具有特定类型的父级的代码。
public static T GetParentOfType<T>(DependencyObject current)
where T : DependencyObject
{
for (DependencyObject parent = VisualTreeHelper.GetParent(current);
parent != null;
parent = VisualTreeHelper.GetParent(parent))
{
T result = parent as T;
if (result != null)
return result;
}
return null;
}