通过单击事件获取MenuItem名称

通过单击事件获取MenuItem名称

问题描述:

我想通过单击它来获取MenuItem名称。通过单击事件获取MenuItem名称

据我所知,有我的Menu,其中有两个MenuItem(如你所见)。

XAML:

<DockPanel Margin="0,-17,0,0"> 
     <Menu DockPanel.Dock="Top"> 
      <MenuItem Header="_Optionen"> 
       <MenuItem Name="MI_1" Header="MI 1" Click="Set_MI"/> 
       <MenuItem Name="MI_2" Header="MI 2" Click="Set_MI"/> 
      </MenuItem> 
     </Menu> 
     <StackPanel></StackPanel> 
    </DockPanel> 

C#:

private void Set_MI(object sender, RoutedEventArgs e) 
{ 
    var MI = sender as MenuItem; 
    switch (MI.Name) 

我试图object sender转换的MenuItem会抛出我这个错误:

The error Shows up at Switch (MI.Name)

System.NullReferenceException: "The object reference was not set to an object instance."

"MI" is "null"

Btw。我不知道ToolStripMenuItem是什么意思。

是否有任何propper解决object sender转换在MenuItem /通过点击MenuItem得到名称?

+0

你的意思是什么_“不工作” _?它抛出异常,给出一些错误,而不是预期的价值? – SeM

+0

对于WPF,有[MenuItem](https://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem(v = vs.110).aspx),并有[ToolStripMenuItem] (https://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripmenuitem(v=vs.110).aspx),用于WinForms。你有一个WPF标签,但在代码中使用'ToolStripMenuItem'。请首先澄清。另外,“不为我工作”太模糊,你是否得到一个错误? –

+0

如果我怀疑是真的,并且它是一个错误投射的简单情况,只需尝试'var MI = sender作为MenuItem;开关(MI.Name)' –

确保您转换为System.Windows.Controls.MenuItem,而不是一些其他类型的自定义MenuItem类型:

private void Set_Speicherpfade(object sender, RoutedEventArgs e) 
{ 
    var MI = sender as System.Windows.Controls.MenuItem; 
    if (MI != null) 
    { 
     switch (MI.Name) 
     { 
      ... 
     } 
    } 
} 
+0

它不工作,ist sais evertime MI = null。而我现在不是那种MenuItem,我在wpf中创建它,所以我认为它是一个Windows控件。 – Hille

+0

如果事件处理程序实际连接到MenuItem,则我发布的代码确实有效。如果通过在事件处理程序中放置断点来调试代码,则发件人是什么类型?你真的尝试过我的代码吗? – mm8

+0

我必须承认,我把它放在Combobox的worng现场,但现在它工作正常.-。谢谢你的努力 – Hille