2013-04-06 2 views
3

Я работаю над проектом C# WPF, и я храню некоторые элементы в базе данных SQLite, когда загружается программа, затем извлекает элементы из базы данных и добавляет элементы в меню. То, что мне тогда нужно сделать, - позволить пользователю щелкнуть один из добавленных пунктов меню, и что-то делается на основе того, что было нажато. Я не могу найти ничего о том, как это сделать, ниже приведен код того, как я добавляю пункт меню в меню программно.Добавление события click к программно добавленному пункту меню

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

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

Спасибо за любую помощь, которую вы можете предоставить.

ответ

5

Вот пример: за

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

Код::

XAML

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 в качестве его Header или Content.

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) => 
     { 
      ... 
     } 
} 
Смежные вопросы