2017-10-19 77 views
1

我想通過單擊它來獲取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)' –

回答

2

確保您轉換爲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