Двойной щелчок WPF Datagrid на RowDetailsTemplate также запускает событие двойного щелчка на родительской строке - PullRequest
3 голосов
/ 10 мая 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 16 сентября 2014

Я столкнулся с этим и заметил два события, поэтому установка 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 голос
/ 10 мая 2011

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

e.Handled = true;

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

...