如何从MenuItem的代码打开子菜单三角形?

时间:2013-09-30 15:04:37

标签: c# wpf menuitem role

我生成并设置我自己的上下文菜单,并根据

将项目分组到子菜单中
SubTitle.Items.Add(..);

这些弹出子菜单工作正常,几乎都很好......但是......

我无法显示子菜单三角形 UNLESS 我将MenuItem角色(您可以按样式中的每个触发器设置)设置为例如TopLevelHeader等

MenuItem.Role没有直接的setter,所以我不得不创建我的子菜单MenuItems作为XAML静态对象,然后我赋予了很好的样式,所以他们也得到了子菜单三角形。

问题是,我的上下文菜单完全以编程方式从例如如果我重用静态XAML MenuItems,我需要在它们上面设置垃圾收集器以破坏父关系,然后才能重用它们,和/或我必须事先知道这些元素。

有没有办法:

MenuItemThatIsTitle.Role = MenuItemRole.TopLevelHeader; 
//(in order to get the triangle?)

..来自代码?

===

示例代码 - 从代码中添加子菜单到上下文菜单:

            contextM.Items.Add(new Separator());
            var TitleH = new MenuItem
            {
                    Header = SettingsDomain.Default.TitleHeader,
                    FontWeight = FontWeights.Bold,
                    Height = 25,
                    IsEnabled = true,
            };

            if (!(TitleH.Items.Count > 0))
            //TitleH.Role = MenuItemRole.TopLevelHeader; to get the triangle..
            {
                var listmen = List.Select(c => cMenuItem(c)).ToList();
                TitleH.ItemsSource = listmen;
            }

            contextM.Items.Add(TitleH);
            contextM.Items.Add(new Separator());

注意:没有相关的XAML

1 个答案:

答案 0 :(得分:0)

解决方案:不要将菜单的宽度设置为一些整齐的宽度,它会切断菜单右侧的子菜单标记(三角形),它们会消失。