如何在Silverlight用户控件中冒泡事件?

时间:2011-03-09 14:52:09

标签: silverlight events user-controls event-bubbling

我正在尝试将子用户控件中的事件冒泡到其父级。

子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并且它被执行。但是,似乎没有任何事情发生,即使在父用户控件中附加的代码也不会被调用。

有什么建议吗?

提前致谢, 干杯, 詹卢卡。

2 个答案:

答案 0 :(得分:0)

您所寻求的是被称为路由事件。您可以编写自己的自定义文件或查看此library

答案 1 :(得分:0)

好的,我已经对此进行了整理,但问题很少。

第一个问题是由IsHitTestVisible引起的。在一些在线文章中,据说将该属性设置为false,以便解决一些与鼠标事件相关的问题。我这样做了,但这是错误的,因为将该属性设置为false的元素“捕获”鼠标事件,并且它们不再到达内部用户控件。

其次,在最内部的按钮(请参阅上面的帖子以了解该场景),为了使其工作,我必须设置ClickMode =“Hover”并处理MouseLeftButtonUp事件。我会尝试使用标准点击,但我读到的地方只有某些事件会冒泡......

e.Handled不需要任何改变:我已经检查过它已经是假的了。

我都不必使用任何RoutedEvent库...

我想不出我为解决这个问题所做的其他事情。

我想这就是全部。

与往常一样,如果您有任何建议,请随时在此处添加。

干杯, 詹卢卡。