我有一个显示数据的WPF Datagrid。对于DataGrid中显示的每个项目,可以展开该项目以显示使用RowDetailsTemplate显示的详细数据。 DataGrid Row和RowDetailsTemplate都处理Double Click事件。
问题是当双击RowDetailsTemplate时,双击事件被正确触发,但父行的双击事件也被触发。这是不受欢迎的行为。
有没有人知道如何解决这个问题,以便双击RowDetailTemplate只会触发RowDetailsTemplate双击事件而不是它的父行双击事件?
答案 0 :(得分:2)
我遇到了这个并观察到两个事件,所以将e.Handled设置为true并没有帮助。
我找不到更好的解决方案,而不是保留一个布尔锁定'变量:
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 :(得分:1)
事件可能正在冒泡,您可以尝试设置
e.Handled = true;
在行详细信息中双击处理程序以防止父控件处理。