Я пытаюсь создать вложенную иерархию меню из строки главного меню. Например, строка главного меню будет содержать элемент меню «Перейти к», который можно перемещать как «Перейти» -> «Глава» -> «Имя главы» -> «Имя подглавы».
Иерархия под «Главой» должна добавляться динамически. Когда я это делаю, меню исчезает при попытке отобразить подпункты названия главы.
Если вы запустите приведенный ниже пример кода, вы можете нажать «Перейти» и «Глава», но как только вы наведете указатель мыши или на одно из названий глав, меню исчезнут, и одно из подразделов не будет быть нажатым.
Может кто-нибудь сказать мне, почему?
using System;
using System.Windows;
using System.Windows.Controls;
namespace MenuTest
{
public class MenuTest : Window
{
// Main method
[STAThread]
public static void Main()
{
Application App = new Application();
App.Run(new MenuTest());
}
// Properties:
Menu MainMenu;
MenuItem GotoMenu;
MenuItem ChapterMenu;
// Constructor
public MenuTest()
{
// Add a menu with a "Goto" submenu that opens up a pop-up with a "Chapter" selection:
// ----------------------------------------------------------------------------------
MainMenu = new Menu();
DockPanel.SetDock(MainMenu, Dock.Top);
this.Content = MainMenu;
GotoMenu = new MenuItem();
GotoMenu.Header = "Goto";
GotoMenu.SubmenuOpened += OnSubMenuOpen;
MainMenu.Items.Add(GotoMenu);
ChapterMenu = new MenuItem();
ChapterMenu.Header = "Chapter";
GotoMenu.Items.Add(ChapterMenu);
}
// Add a chapter and subchapter hiearachy to the Chapter menu:
void OnSubMenuOpen(object Sender, RoutedEventArgs e)
{
ChapterMenu.Items.Clear();
string[] ChapterNames = { "Chapter 1", "Chapter 2", "Chapter 3" };
foreach (string ChapterName in ChapterNames)
{
MenuItem ThisChapterMenu = new MenuItem();
ThisChapterMenu.Header = ChapterName;
ChapterMenu.Items.Add(ThisChapterMenu);
string[] SubChapterNames = { "SubSection 1", "SubSection 2", "SubSection 3" };
foreach (string SubChapterName in SubChapterNames)
{
MenuItem SectionMenu = new MenuItem();
SectionMenu.Header = String.Format("{0} - {1}", ChapterName, SubChapterName);
ThisChapterMenu.Items.Add(SectionMenu);
}
}
}
}
}