【问题标题】:menuItem.InputGestureText not showing shortcut textmenuItem.InputGestureText 不显示快捷方式文本
【发布时间】:2015-10-09 15:15:29
【问题描述】:

在我的应用程序中,我正在代码中创建菜单项。这是创建菜单项的代码

public MenuItem getMenuItem(string toolTip, string menuTitle, Uri menuIconUri, int? tagOnlyForHeaders, string shortCutKeyText ="")
    {
        MenuItem menuItem = new MenuItem
        {
            ToolTip = toolTip,
            Header = menuTitle
        };
        if (menuIconUri != null)
        {
            menuItem.Icon = new Image
            {
                Source = new BitmapImage(menuIconUri)
            };
        }
        if (tagOnlyForHeaders != null) {
            menuItem.Tag = tagOnlyForHeaders;
        }

        if (shortCutKeyText != "") {
            menuItem.InputGestureText = shortCutKeyText;
        }
        return menuItem;
    }

但如果我为输入手势传递值,例如ctrl+n,则在应用程序运行时,它不会在菜单项中显示快捷方式文本。这段代码有什么问题。谁能告诉这个解决方案。

这就是我添加菜单项的方式

//Top level Op menu
        var opMenuItem = utils.getMenuItem("OP", MenuName, null, 0);

        //op registration
        var RegistrationMenuItem = utils.getMenuItem("New Registration", "New Registration",
            new Uri(baseIconUri + "newRegistration.png"), null,"ctrl+n ");
        opMenuItem.Items.Add(opRegistrationMenuItem);
        return opMenuItem;

这被添加到主菜单中

mainMenu.Items.Add(menuItem); // in this case the "opMenuItem"

【问题讨论】:

  • 您的MenuItemMenu 对象的直接子对象吗?
  • 您的意思是MenuItem 应该在您为MenuItem 设置一些KeyBinding 时自动显示手势显示字符串吗?我认为我们需要手动设置InputGestureText,就像您在代码中所做的那样。默认模板还显示内部TextBlock 的文本绑定到InputGestureText
  • @EmpereurAiman 很抱歉迟到了,是的,这是一个直接的孩子
  • @KingKing 我只有当它被设置的时候。 AFAIK 这就是它的工作原理
  • 您添加的menuItem 只是一个顶级菜单项,因此它无法显示InputGestureText。 mainMenu 是一个Menu,所以它的直接孩子当然是一个顶级的MenuItem(比如在一个典型的窗口中,你可以看到顶级的MenuItems 包括File i>查看帮助、...)。在这种情况下,您想显示一些 InputGestureText,例如 File?这没有多大意义(甚至看起来很丑),要完成这个奇怪的要求,您需要进行更多的自定义,而不仅仅是设置InputGestureText

标签: c# wpf keyboard-shortcuts menuitem


【解决方案1】:

InputGestureText 仅在MenuItem不是Menu 的直接子代(即不直接在Items 集合内)时有效。如果要查看InputGestureText,则需要将MenuItem 添加到另一个MenuItemItems 集合中。为了说明我所说的,这里有一个 XAML 中的示例。

<Menu>
    <MenuItem Header="File" InputGestureText="Ctrl+Z">
        <MenuItem InputGestureText="Ctrl+C" Header="Open"></MenuItem>
    </MenuItem>
</Menu>

MenuItem (Header = "File) 的 InputGestureText 不可见,但 MenuItem (Header="Open") 的 InputGestureText 可见。

【讨论】:

  • 直子,我的意思是展开时它是顶层菜单中的一个菜单项,比如file => open ctrl+o
  • 您能说明如何将 menuItems 添加到 Menu 对象吗?
  • 我明白了,我不知道问题出在哪里:(
【解决方案2】:

这是我用来设置用户界面样式的库(Material design library) 的问题。我已报告此问题并已修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多