Двойной щелчок сетки данных WPF по RowDetailsTemplate также запускает событие двойного щелчка по родительской строке

#wpf #wpfdatagrid

#wpf #wpfdatagrid

Вопрос:

У меня есть сетка данных WPF, отображающая данные. Для каждого элемента, отображаемого в DataGrid, элемент может быть расширен для отображения подробных данных, отображаемых с помощью RowDetailsTemplate. Событие двойного щелчка обрабатывается как в строке DataGrid, так и в RowDetailsTemplate.

Проблема в том, что при двойном щелчке по RowDetailsTemplate событие двойного щелчка запускается корректно, но также запускается событие двойного щелчка для родительской строки. Это нежелательное поведение.

Кто-нибудь знает, как это решить, чтобы двойной щелчок по RowDetailTemplate вызывал только событие двойного щелчка по RowDetailsTemplate, но не событие двойного щелчка по родительской строке?

Ответ №1:

Я столкнулся с этим и наблюдал два события, поэтому установка e.Handled в true не помогла.

Я не смог найти лучшего решения, чем сохранить логическую переменную ‘lock’:

 private bool lockDoubleClick;

private void dgParent_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    if (lockDoubleClick) return;
    // parent was double-clicked; do something
}

private void dgChild_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    lockDoubleClick = true;
    // child was double-clicked; do something
    Dispatcher.BeginInvoke(new Action(() => lockDoubleClick = false));
}
  

Комментарии:

1. Я пришел к тому же выводу, что и вы. Благодарим вас за публикацию этого решения.

Ответ №2:

Событие, вероятно, пузырится, вы могли бы попробовать настроить

 e.Handled = true;
  

в обработчике сведений о строке дважды щелкните, чтобы предотвратить обработку родительскими элементами управления.