3

私は C# WPF プロジェクトに取り組んでおり、いくつかの項目を SQLite データベースに保存しています。プログラムがロードされると、データベースから項目が取得され、項目がメニューに追加されます。次に行う必要があるのは、ユーザーが追加されたメニュー項目の 1 つをクリックできるようにすることです。クリックされた項目に基づいて何かが実行されます。これを行う方法については何も見つかりません。以下は、プログラムでメニュー項目をメニューに追加する方法のコードです。

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

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

ご協力いただきありがとうございます。

4

3 に答える 3

6

次に例を示します。

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!");
}
于 2013-04-06T13:32:55.503 に答える
1

インスタンス化して をまたはとしてMenuItem使用できるコントロールが必要です。connectionHeaderContent

MenuItemその後、それClickに対するイベントハンドラーを持つか、コマンドを設定できます。

ただし、理想的には、connectionsコレクションを取得し、それを のプロパティに設定してから、そのコレクションmodelmenuバインドする必要があります。そう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>
于 2013-04-06T13:26:55.523 に答える
0
foreach(string menuCaption from ...)
{
    MenuItem mi=new MenuItem();
    mi.Header = meniCaption;
    mi.Click += (s,e) =>
        {
             ...
        }
}
于 2013-04-06T13:34:09.993 に答える