2011-05-10 59 views
2

我有一个WPF Datagrid显示数据。对于DataGrid中显示的每个项目,可以展开该项目以显示使用RowDetailsTemplate显示的详细数据。 DataGrid行和RowDetailsTemplate处理双击事件。WPF Datagrid双击RowDetailsTemplate也会触发父行上的双击事件

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

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

回答

1

该事件可能是起泡,你可以尝试设置

e.Handled = true; 
在行细节双击处理程序

,以防止父控件处理。

1

我遇到了这个,并观察到两个事件,所以将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)); 
} 
+0

我得出了同样的结论,你。感谢您发布此解决方法。 – Wally 2014-10-22 16:34:41