のリストをメニューに追加する代わりに、ポートごとstring
に を作成し、MenuItem
その項目のクリック イベントを登録してから、メイン メニューに追加する必要があります。コードビハインドを次のように変更します。
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
MenuItem menuItem = new MenuItem { Header = port };
menuItem.Click += new RoutedEventHandler(Menu_Port_Click);
Menu_Port.Items.Add(menuItem);
}
次に、イベント ハンドラー メソッドを追加して、メニュー項目 (つまり、ポート) からテキストを取得します。
private void Menu_Port_Click(object sender, RoutedEventArgs e)
{
string selectedPort = ((MenuItem)sender).Header.ToString();
// Alternatively, if you want to maintain a list of selected ports, you can do something like this:
MenuItem selectedMenu = ((MenuItem)sender);
if (selectedMenu.IsChecked)
{
// In this case "allSelectedPorts" is a global string list.
allSelectedPorts.Add(selectedMenu.Header.ToString());
}
else
{
allSelectedPorts.Remove(selectedMenu.Header.ToString());
}
}
編集
一度に 1 つのメニュー項目だけを選択したい場合は、次のようにすることができます。
string selectedPort = string.Empty;
private void Menu_Port_Click(object sender, RoutedEventArgs e)
{
MenuItem selectedMenu = ((MenuItem)sender);
Menu_Port.Items.Cast<MenuItem>().Where(
menu => menu != selectedMenu).ToList().ForEach(item => item.IsChecked = false);
if (selectedMenu.IsChecked)
{
selectedPort = selectedMenu.Header.ToString();
}
else
{
selectedPort = string.Empty;
}
}