2016-11-29 43 views
0

我用一個字符串數組定義菜單的一部分,我想爲它們中的每一個自動創建點擊事件。他們所有人都將採取相同的行動,只是一個不同的參數。從WPF菜單項創建點擊事件由一個字符串定義的項目

string[] goTos = new string[] { "First", "Second", "Third" }; 

當初始化窗口:

 foreach (string item in goTos) 
     { 
      System.Windows.Controls.MenuItem goTo = new System.Windows.Controls.MenuItem(); 
      goTo.Header = item; 
      goTo.Name = "mnu" + item; 
      mnuGoTo.Items.Add(goTo); 
     } 

我怎樣才能點擊這些事件?

+0

只需添加事件處理程序並在事件處理程序方法中通過檢查處理程序方法的sender參數來確定哪個MenuItem調用了處理程序。 – Adwaenyth

+0

任何想法如何我可以提取標題? – FanFu

+0

傳遞給您的處理程序方法的'sender'對象是'MenuItem'對象。所以如果你使用'(sender作爲MenuItem).Header',你已經得到了所有你想要的。 (如果處理程序也可能從其他控件調用,則可能需要添加一個空值檢查。) – Adwaenyth

回答

0

你可以試試這個

string[] goTos = new string[] { "First", "Second", "Third" }; 
     foreach (string item in goTos) 
     { 
      System.Windows.Controls.MenuItem goTo = new System.Windows.Controls.MenuItem(); 
      goTo.Header = item; 
      goTo.Name = "mnu" + item; 
      goTo.Click += new RoutedEventHandler(goTo_Click); 
      mnuGoTo.Items.Add(goTo); 
     } 

    } 

    void goTo_Click(object sender, RoutedEventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 
1

,如果他們「要以同樣的事情」

我建議您在查看使用

<MenuItem Name="MenuItems" Header="Item1"> 
    <i:Interaction.Triggers> 
      <i:EventTrigger EventName="Click"> 
       <ei:CallMethodAction TargetObject="{Binding}"MethodName="Event"/> 
      </i:EventTrigger> 
    </i:Interaction.Triggers> 
</MenuItem> 

和事件的方法添加到您的Viewmodel

如果您沒有爲您的項目使用MVVM,這是學習的最佳時機。

+0

我會毫不猶豫地研究它! – FanFu

+0

在您的ViewModel中爲MethodName創建一個方法。 –