14

スクロールバーまたはヘッダーをダブルクリックすると、DataGrid MouseDoubleClickイベントが発生するのはなぜですか?

これを回避し、データグリッド内をダブルクリックしたときにのみイベントを発生させる方法はありますか?

4

3 に答える 3

13

スクロールバーとヘッダーはグリッドの一部ですが、ダブルクリックを処理しないため、イベントはグリッドまで「バブル」します。

エレガントでない解決策は、イベントソースまたはマウス座標を使用して「クリックされたもの」をいくらか見つけることです。

しかし、あなたはそのようなことをすることもできます(テストされていません):

<DataGrid>
  <DataGrid.RowStyle>
    <Style TargetType="{x:Type DataGridRow}">
      <EventSetter Event="MouseDoubleClick" Handler="OnRowDoubleClicked"/>
    </Style>
  </DataGrid.RowStyle>
</DataGrid>
于 2012-04-26T08:59:12.210 に答える
4

マウスクリックイベント内で、ヒットポイントに関する詳細を確認できます-

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

于 2012-04-26T08:45:08.350 に答える
1

私は同じ問題を抱えていて、これでそれを解決しました:

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

私はこれを読んでアイデアを得ました:リストビューのスクロールバーのダブルクリックを検出する方法は?

お役に立てば幸いです:)

于 2016-09-21T08:40:57.617 に答える