0

我生成并设置自己的上下文菜单,并将项目分组到子菜单中

SubTitle.Items.Add(..);

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

除非我将 MenuItem 角色(您可以在样式中为每个触发器设置)设置为例如 TopLevelHeader 等,否则我无法显示子菜单三角形。

MenuItem.Role 没有直接设置器,因此我将不得不将我的子菜单 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

4

1 回答 1

0

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

于 2013-10-01T09:05:12.917 回答