我正在尝试将子用户控件中的事件冒泡到其父级。
子usercontrol是网格内的一个按钮:
<UserControl>
<Grid>
<Button Click="Button_Click" />
</Grid>
</UserControl>
父用户控件由子控件的许多实例组成:
<UserControl>
<StackPanel>
<customs:myButton CustomClick="something" />
<customs:myButton CustomClick="something" />
<customs:myButton CustomClick="something" />
etc.
</StackPanel>
</UserControl>
在子用户控件中我定义了:
public delegate void CustomClickHandler(object sender, EventArgs e);
public event CustomClickHandler CustomClick;
并且“inner”按钮以这种方式处理click事件:
private void Button_Click(object sender, EventArgs e)
{
if (CustomClick != null)
CustomClick (sender, e);
}
我试图检查它是什么,我可以看到Button_Click被调用,CustomClick不为null并且它被执行。但是,似乎没有任何事情发生,即使在父用户控件中附加的代码也不会被调用。
有什么建议吗?
提前致谢, 干杯, 詹卢卡。
答案 0 :(得分:0)
您所寻求的是被称为路由事件。您可以编写自己的自定义文件或查看此library。
答案 1 :(得分:0)
好的,我已经对此进行了整理,但问题很少。
第一个问题是由IsHitTestVisible引起的。在一些在线文章中,据说将该属性设置为false,以便解决一些与鼠标事件相关的问题。我这样做了,但这是错误的,因为将该属性设置为false的元素“捕获”鼠标事件,并且它们不再到达内部用户控件。
其次,在最内部的按钮(请参阅上面的帖子以了解该场景),为了使其工作,我必须设置ClickMode =“Hover”并处理MouseLeftButtonUp事件。我会尝试使用标准点击,但我读到的地方只有某些事件会冒泡......
e.Handled不需要任何改变:我已经检查过它已经是假的了。
我都不必使用任何RoutedEvent库...
我想不出我为解决这个问题所做的其他事情。
我想这就是全部。
与往常一样,如果您有任何建议,请随时在此处添加。
干杯, 詹卢卡。