【发布时间】:2014-03-24 18:39:19
【问题描述】:
我有一个嵌入在另一个控件中的用户控件。这两个控件都有它们的 mouseup 事件,但是当我按下用户控件时,它的父控件 mouseup 事件会自动被触发。我怎样才能阻止这种情况?
【问题讨论】:
-
检查鼠标是否覆盖子元素。
-
你能详细说明一下吗?
我有一个嵌入在另一个控件中的用户控件。这两个控件都有它们的 mouseup 事件,但是当我按下用户控件时,它的父控件 mouseup 事件会自动被触发。我怎样才能阻止这种情况?
【问题讨论】:
MouseUp 事件有一个冒泡路由策略,这意味着它会从后代冒泡到祖先。要停止传播,请将事件标记为在子事件处理程序中处理:
e.Handled = true;
您可以了解更多关于event routing strategies on MSDN的信息。
【讨论】:
我建议您阅读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;
}
【讨论】: