WPF Datagrid双击RowDetailsTemplate也会在父行上触发双击事件

时间:2011-05-10 16:12:39

标签: wpf wpfdatagrid

我有一个显示数据的WPF Datagrid。对于DataGrid中显示的每个项目,可以展开该项目以显示使用RowDetailsTemplate显示的详细数据。 DataGrid Row和RowDetailsTemplate都处理Double Click事件。

问题是当双击RowDetailsTemplate时,双击事件被正确触发,但父行的双击事件也被触发。这是不受欢迎的行为。

有没有人知道如何解决这个问题,以便双击RowDetailTemplate只会触发RowDetailsTemplate双击事件而不是它的父行双击事件?

2 个答案:

答案 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;

在行详细信息中双击处理程序以防止父控件处理。