Доступ к пункту меню (WPF)

#c# #wpf #menu

#c# #wpf #меню

Вопрос:

Я использую следующий код для обработки кликов по пункту меню:

  private void MenuItem_Click(object sender, RoutedEventArgs e)
 {
     MenuItem mi = (MenuItem)sender;

     switch (mi.Name)
     {
         case "MenuItem1":
         .
         .
         ///How to disable MenuItem2 from here?
         break;

         case "MenuItem2":
         .
         .
         break;
     }
  }
  

Хотя я могу получить доступ к элементу меню, который был выбран, как мне получить доступ к другому элементу меню, который не был выбран?

Ответ №1:

Вы не должны использовать переключатели для свойства name, вместо этого создайте обработчик событий для каждого элемента. Кроме того, если элемент меню является «статическим», у вас уже должна быть ссылка на него, так что вы должны иметь возможность использовать его через MenuItem2.LoremIpsum . Если он не является статическим, вы можете добавить ссылку MenuItem1 на Tag него, например: Tag="{x:Reference MenuItem2}" , затем вы можете привести mi.Tag и использовать его оттуда. Конечно, существуют и другие методы получения ссылки, такие как FindName или другие рекурсивные методы поиска, которые обходят визуальные или логические деревья.

Помимо переключения имени, я сомневаюсь, что доступ к одному пункту меню из другого — такая хорошая идея, все будет запутано.

Комментарии:

1. Только что понял, что я могу получить к нему прямой доступ. Элемент меню 2. IsEnabled = false; на самом деле работает. Спасибо за совет об использовании отдельных обработчиков событий. Код не слишком большой, поэтому, возможно, доступ к нему из другого пункта меню не будет слишком сложным (надеюсь).

Ответ №2:

Используйте VisualTreeHelper, чтобы подняться на один уровень вверх по дереву, чтобы добраться до вашего меню — оттуда вы можете получить доступ к тому, что вам нравится.