我想知道处理大约30个菜单项的Click事件最好的方式是什么?
我的第一个想法显然是为每个菜单项创建一个事件侦听器,如下所示:
XAML:
<Menu Name="MainMenu" IsMainMenu="True" Height="25">
<MenuItem Header="_File" >
<MenuItem Name="New" Header="_New" Click="MenuItem_NewClick" />
<MenuItem Name="Open" Header="_Open" Click="MenuItem_OpenClick" />
<MenuItem Name="Save" Header="_Save" Click="MenuItem_SaveClick" />
</MenuItem>
</Menu>
C# 1:
private void MenuItem_NewClick(object sender, RoutedEventArgs e)
{
//Do work...
}
private void MenuItem_OpenClick(object sender, RoutedEventArgs e)
{
//Do work...
}
private void MenuItem_SaveClick(object sender, RoutedEventArgs e)
{
//Do work...
}
但是这种方法看起来很凌乱,特别是对于像Copy或Paste这样不需要太多代码的菜单项。
相反,我可以使用一个事件监听器,并使用if / case检查MenuItem并消除所有额外的事件监听器,如下所示:
C# 2:
private void MenuItem_FileClick(object sender, RoutedEventArgs e)
{
MenuItem item = e.OriginalSource as MenuItem;
switch (item.Name)
{
case "New":
MessageBox.Show("New File Created.");
break;
case "Open":
MessageBox.Show("File Opened Created.");
break;
case "Save":
MessageBox.Show("File Saved.");
break;
}
}
这种方式看起来更加干净,但如果菜单项需要完成的工作不仅仅是打开另一个窗体或清空几个控件,那么它也会变得混乱。如果需要复杂的逻辑处理,我可以调用一个函数,但我认为这会导致代码混乱难懂。
如何以最优雅的方式解决这个问题?
谢谢, Tanner