【问题标题】:WPF Menu disappears when nested too deeply嵌套太深时 WPF 菜单消失
【发布时间】:2009-11-26 21:08:29
【问题描述】:

我正在尝试从主菜单栏创建嵌套菜单层次结构。例如,主菜单栏将包含一个“Goto”菜单项,可以通过“Goto”->“Chapter”->“Chapter Name”->“Subchapter name”进行导航。

“章节”下方的层次结构需要动态添加。当我这样做时,菜单会在尝试显示章节名称的子项时消失。

如果您运行下面的代码示例,您可以单击“转到”和“章节”,但是一旦您将鼠标悬停在或单击其中一个章节名称,菜单就会消失,而不允许其中一个小节名称出现被点击。

谁能告诉我为什么?

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);
                }
            }
        }
    }
}

【问题讨论】:

    标签: c# wpf menu nested menuitem


    【解决方案1】:

    GotoMenu 下的每一级菜单都会调用 OnSubMenuOpen,因此每次展开时都会清除 ChapterMenu。

    在 OnSubMenuOpen 的第一行,检查调用的来源:

     void OnSubMenuOpen(object Sender, RoutedEventArgs e)
     {
        if (e.Source != GotoMenu) return;
    

    【讨论】:

      猜你喜欢
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      相关资源
      最近更新 更多