#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;
в обработчике сведений о строке дважды щелкните, чтобы предотвратить обработку родительскими элементами управления.