我需要我的应用程序在双击 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 。所以我不确定我是否单击了滚动条。
那么如何检查我是否真的双击了滚动条?
最佳答案
这里不需要使用 HitTest ,只需通过遍历可视化树来检查 e.OriginalSource
是否具有 ScrollBar
类型的父级即可。这种方法有一个潜在的问题 - 必须加载 UI 元素,这通常是处理鼠标事件时的情况。这是检查 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;
}
关于.net - 检查数据网格中的双击是否单击了滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893263/