我正在尝试将一个事件从一个孩子的用户控件发送到它的父代。如何在Silverlight usercontrols中冒泡事件?
孩子用户控件是网格内的按钮:
<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不是null并且它被执行。然而,似乎没有发生,即使在父级用户控件中附加的代码也不会被调用。
有什么建议吗?
在此先感谢, 干杯, Gianluca。
感谢您的回复。我认为这是问题,我试图自己实施冒泡的事情。很好,一个lib已经存在。不过,我认为我面临着其他一些问题:我可以通过“TAB”移动“myButton”的几个实例,但我无法通过使用鼠标选择任何一个或与它们进行交互......你认为这是什么问题有点相关? – 2011-03-09 17:10:20
如果您的routedevents特定于鼠标,您可能会跳过处理该按钮本身的事件。州有效吗?如鼠标悬停等。 – 2011-03-09 17:14:34
快速更新。父用户控件位于另一个用户控件内(shellView包含小键盘,其中包含许多按钮)。我可以看到为shellView中定义的第一个Grid启动了一个mouseleftdown事件。如果我试图在其他任何内部控制中发现事件,它就不起作用。任何想法? – 2011-03-09 17:17:23