Меню
58WPF --- Элементы управления WPF --- Меню
В WPF предлагаются два элемента управления меню: Menu (для главных меню) и ContextMenu (для всплывающих меню, присоединяемых к другим элементам). Как и для всех остальных классов, WPF выполняет визуализацию для элементов управления Menu и ContextMenu. Это означает, что упомянутые элементы управления не являются простыми оболочками Win32 и могут использоваться несколькими необычными способами.
Если класс Menu используется в приложении, обслуживаемом в браузере, он появляется в верхней части страницы. Окно браузера упаковывает страницу приложения и может как включать, так и не включать собственное меню, которое тогда будет отображаться совершенно отдельно.
Класс Menu
В WPF не делается никаких предположений по поводу того, где должно размещаться автономное меню. Обычно оно пристыковывается в верхней части окна с помощью элемента управления DockPanel или верхней строки элемента управления Grid либо просто растягивается по всей ширине окна. Однако на самом деле меню можно размещать где угодно, даже рядом с другими элементами управления. Более того, в окно можно добавлять столько меню, сколько нужно. Хотя особого смысла в этом и нет, но также существует возможность размещать строки меню стопками и вразброс по всему пользовательскому интерфейсу.
Такая свобода действий открывает кое-какие интересные возможности. Например, если вы создадите меню с одним высокоуровневым заголовком и стилизуете его под кнопку, получится всплывающее меню, вызываемое одиночным щелчком мыши. Применение подобных уловок может помочь добиться в точности желаемого эффекта в сложном интерфейсе, а может оказаться и просто более изощренным способом запутывания пользователей.
Класс Menu предоставляет дополнительно всего одно новое свойство: IsMainMenu. При значении true (которое является значением по умолчанию) нажатие клавиши <Alt> или <F10> приводит, как и в любом другом Windows-приложении, к перемещению фокуса на меню. Помимо этой небольшой детали у контейнера Menu имеется также несколько знакомых свойств ItemsControl — ItemsSource, DisplayMemberPath, ItemTemplate и ItemTemplateSelector, с помощью которых можно создавать привязываемые к данным меню. Можно также применять группирование, изменять компоновку элементов внутри меню и применять к элементам меню различные стили.
Очевидно, что во внешний вид меню и подменю можно вносить и более радикальные изменения с помощью триггеров и шаблонов элементов управления. Базовую логику стилизации можно посмотреть в используемом по умолчанию шаблоне элемента управления MenuItem.