在这个应用程序中,我在用户控件中放置了一个菜单。
<UserControl>
<Grid>
<Menu x:Name="mainMenu">
<MenuItem Header="File">
<MenuItem Header="Open Analysis">
<MenuItem Header="Load all" />
<MenuItem Header="Select from tracks" />
</MenuItem>
</MenuItem>
</Menu>
</Grid>
</UserControl>
我想将菜单上的所有“单击”事件路由并冒泡到用户控件中的单个单击事件。所以我实现了:
public static readonly RoutedEvent ClickEvent = eventManager.RegisterRoutedEvent("Click", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MenuItem));
public event RoutedEventHandler Click
{
add { AddHandler(ClickEvent, value); }
remove { RemoveHandler(ClickEvent, value); }
}
但这在例外情况下失败:
{"RoutedEvent Name 'Click' for OwnerType 'System.Windows.Controls.MenuItem'
already used."}
我想这是事件被多次注册,因为有多个 MenuItems,所以它第二次想要注册失败。
但是我怎样才能以一种良好的可维护方式将所有这些事件“捆绑”(如单一处理程序附加点)到用户控件中的一个事件中?由于某些子菜单由数据库提供,因此是动态构建的。