双击滚动条时,为什么会触发DataGrid MouseDoubleClick事件?

时间:2012-04-26 08:34:43

标签: c# .net wpf

为什么双击滚动条或标题时会触发DataGrid MouseDoubleClick事件?

有没有办法避免这种情况,只有当我在数据网格中双击时才会触发事件。

3 个答案:

答案 0 :(得分:13)

滚动条和标题是网格的一部分,但不处理双击,因此事件会“冒泡”到网格。

优雅的解决方案是通过事件源或鼠标坐标的平均值找出“被点击的内容”。

但你也可以这样做(未经测试):

<DataGrid>
  <DataGrid.RowStyle>
    <Style TargetType="{x:Type DataGridRow}">
      <EventSetter Event="MouseDoubleClick" Handler="OnRowDoubleClicked"/>
    </Style>
  </DataGrid.RowStyle>
</DataGrid>

答案 1 :(得分:2)

您可以在鼠标点击事件中查看有关命中点的详细信息 -

DependencyObject dep = (DependencyObject)e.OriginalSource;

// iteratively traverse the visual tree
while ((dep != null) &&
        !(dep is DataGridCell) &&
        !(dep is DataGridColumnHeader))
{
    dep = VisualTreeHelper.GetParent(dep);
}

if (dep == null)
    return;

if (dep is DataGridColumnHeader)
{
    DataGridColumnHeader columnHeader = dep as DataGridColumnHeader;
    // do something
}

if (dep is DataGridCell)
{
    DataGridCell cell = dep as DataGridCell;
    // do something
}

https://blog.scottlogic.com/2008/12/02/wpf-datagrid-detecting-clicked-cell-and-row.html

答案 2 :(得分:0)

我遇到了同样的问题并用此解决了这个问题:

DependencyObject src = VisualTreeHelper.GetParent((DependencyObject)e.OriginalSource);
if (!(src is Control) && src.GetType() != typeof(System.Windows.Controls.Primitives.Thumb))
{
    //your code
}

我已经阅读了这个想法:How to detect double click on list view scroll bar?

我希望它能帮助:)。