【问题标题】:Trying to call child's event without calling parents event试图在不调用父母事件的情况下调用孩子的事件
【发布时间】:2014-03-24 18:39:19
【问题描述】:

我有一个嵌入在另一个控件中的用户控件。这两个控件都有它们的 mouseup 事件,但是当我按下用户控件时,它的父控件 mouseup 事件会自动被触发。我怎样才能阻止这种情况?

【问题讨论】:

  • 检查鼠标是否覆盖子元素。
  • 你能详细说明一下吗?

标签: c# wpf


【解决方案1】:

MouseUp 事件有一个冒泡路由策略,这意味着它会从后代冒泡到祖先。要停止传播,请将事件标记为在子事件处理程序中处理:

e.Handled = true;

您可以了解更多关于event routing strategies on MSDN的信息。

【讨论】:

    【解决方案2】:

    我建议您阅读Routed Eventings 的基础知识,以更好地了解事件在 WPF 中的工作方式。您可以查看此MSDN 链接以进一步阅读。

    最好的办法是识别OriginalSource(启动事件的原始对象),将其转换为您的子类型,然后继续执行您的逻辑。

    例如:

    void Handler(object obj, RoutedEventArgs e)
        {
            YourChildControl c = e.OriginalSource as YourChildControl;
            if (c != null)
            {
                //this will execute when 
                //do whatever you wanted to do.
            }
            e.Handled = false;
        }
    

    【讨论】:

      猜你喜欢
      • 2017-11-30
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多