【问题标题】:How to bubble events in Silverlight usercontrols?如何在 Silverlight 用户控件中冒泡事件?
【发布时间】:2011-03-09 14:52:09
【问题描述】:

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

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

<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 不为​​空并且它被执行。但是似乎什么也没发生,即使在父用户控件中附加的代码也不会被调用。

有什么建议吗?

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

【问题讨论】:

    标签: silverlight events user-controls event-bubbling


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我认为这是问题所在,我试图自己实现冒泡。很好,一个库已经存在。但是我认为我面临着其他一些问题:我可以使用“TAB”在“myButton”的几个实例中移动,但我无法使用鼠标选择它们或与它们交互......你认为这个问题是否相关?
    • 如果您的路由事件是特定于鼠标的,您可能会跳过处理按钮本身的事件。国家有效吗?比如鼠标悬停等。
    • 快速更新。父用户控件在另一个用户控件内(shellView 包含键盘,其中包含许多键盘按钮)。我可以看到为 shellView 中定义的第一个 Grid 触发了 mouseleftdown 事件。如果我尝试在任何其他内部控件中捕获该事件,它就不起作用。有什么想法吗?
    • 将 e.Handled 设置为 false。或类似的东西。
    • 很遗憾没有工作。就像层次结构中最上面的控件正在捕获内部用户控件的所有事件......
    【解决方案2】:

    好的,我已经解决了这个问题,但问题很少。

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

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

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

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

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

    我想这就是全部。

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

    干杯, 詹卢卡。

    【讨论】:

      猜你喜欢
      • 2013-09-20
      • 1970-01-01
      • 2012-07-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多