将onclick事件添加到以编程方式添加的菜单项

时间:2013-04-06 13:23:50

标签: c# wpf menu menuitem

我正在开发一个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);
}

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分: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 :(得分:1)

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

然后

MenuItem会有一个Click事件处理程序,或者你可以设置命令。

但理想情况下,您应该检索connections集合,将其设置为model上的属性,然后将menu绑定到该集合,这样就简单了使用ItemTemplate作为菜单。

e.g。

        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);
        }

OR与绑定:

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

                </MenuItem>
            </DataTemplate>
        </Menu.ItemTemplate>
    </Menu>

答案 2 :(得分:0)

foreach(string menuCaption from ...)
{
    MenuItem mi=new MenuItem();
    mi.Header = meniCaption;
    mi.Click += (s,e) =>
        {
             ...
        }
}