2013-04-06 250 views
3

我正在C#WPF项目上工作,我正在将一些项目存储在SQLite数据库中,当程序加载时,它会从数据库中检索项目并将项目添加到菜单。然后,我需要做的是允许用户点击其中一个添加的菜单项,并根据点击的内容完成一些操作。我找不到如何做到这一点的任何事情,下面是我如何以编程方式将菜单项添加到菜单的代码。将点击事件添加到编程添加的菜单项

StoredDBConnectionManager storedDbConnectionManager = new StoredDBConnectionManager(Properties.Settings.Default.app_dbPassword); 
List<string> connections = storedDbConnectionManager.getStoredConnections(); 

foreach (string connection in connections) 
{ 
     mnuFileDBConnections.Items.Add(connection); 
} 

感谢您提供任何帮助。

回答

5

下面是一个例子:

XAML:

<Menu Height="23" HorizontalAlignment="Left" Name="menu1" VerticalAlignment="Top" Width="200" /> 

后面的代码:

public MainWindow() { 
    InitializeComponent(); 

    MenuItem item = new MenuItem { Header = "test" }; 
    item.Click += new RoutedEventHandler(item_Click); 
    menu1.Items.Add(item); 
} 

public void item_Click(Object sender, RoutedEventArgs e) { 
    MessageBox.Show("Hello!"); 
} 
1

应该有一个MenuItem控件,您可以实例化并使用connection作为其HeaderContent

MenuItem然后将有一个Click事件处理程序反对它或您可以设置命令。

然而理想,你应该检索connections收集,将其设置为一个属性上的model,然后绑定到该集合的menu,这样,它是利用一个ItemTemplate为菜单的一个简单的事情。

例如

 StoredDBConnectionManager storedDbConnectionManager = new StoredDBConnectionManager(Properties.Settings.Default.app_dbPassword); 
     List<string> connections = storedDbConnectionManager.getStoredConnections(); 

     foreach (string connection in connections) 
     { 
      var mi = new MenuItem() 
      { 
       Header = connection, 
      }; 

      mi.Click += ConnectionMenuItemClicked; 

      mnuFileDBConnections.Items.Add(mi); 
     } 

或与结合:

<Menu ItemsSource="{Binding Connections}"> 
     <Menu.ItemTemplate> 
      <DataTemplate> 
       <MenuItem Header="{Binding}" Click="ConnectionsMenuItem_Clicked"> 

       </MenuItem> 
      </DataTemplate> 
     </Menu.ItemTemplate> 
    </Menu> 
0
foreach(string menuCaption from ...) 
{ 
    MenuItem mi=new MenuItem(); 
    mi.Header = meniCaption; 
    mi.Click += (s,e) => 
     { 
      ... 
     } 
}