【发布时间】: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"
【问题讨论】:
-
您的
MenuItem是Menu对象的直接子对象吗? -
您的意思是
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