【问题标题】:WPF Datagrid Double Click on RowDetailsTemplate also fires Double Click event on parent RowWPF Datagrid 双击 RowDetailsTemplate 也会触发父行上的双击事件
【发布时间】:2011-08-22 14:58:10
【问题描述】:

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

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

有谁知道如何解决这个问题,这样双击 RowDetailTemplate 只会触发 RowDetailsTemplate 双击事件,而不是它的父 Row 双击事件?

【问题讨论】:

    标签: wpf wpfdatagrid


    【解决方案1】:

    事件可能正在冒泡,你可以尝试设置

    e.Handled = true;
    

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

    【讨论】:

      【解决方案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));
      }
      

      【讨论】:

      • 我得出了和你一样的结论。感谢您发布此解决方法。
      猜你喜欢
      • 1970-01-01
      • 2019-02-09
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 2012-01-25
      • 2014-05-12
      • 2018-03-31
      相关资源
      最近更新 更多