1

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

子用户控件是网格内的一个按钮:

<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;

并且“内部”按钮以这种方式处理点击事件:

    private void Button_Click(object sender, EventArgs e)
    {
        if (CustomClick != null)
            CustomClick (sender, e);
    }

我试图检查它发生了什么,我可以看到 Button_Click 被调用,CustomClick 不为​​空并且它被执行。但是似乎什么也没发生,即使在父用户控件中附加的代码也不会被调用。

有什么建议吗?

在此先感谢,干杯,吉安卢卡。

4

2 回答 2

0

好的,我已经解决了这个问题,但几乎没有问题。

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

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

e.Handled 不需要任何更改:我已经检查过,它已经是错误的。

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

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

我想这就是全部。

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

干杯,吉安卢卡。

于 2011-03-09T18:21:08.303 回答
0

您正在寻找的称为路由事件。您可以编写自己的自定义库或查看此

于 2011-03-09T16:47:26.653 回答