WPF - 如何让动态添加的菜单项助记符起作用
WPF - How to get dynamically added Menu Item Mnemonics to work
我正在动态创建子菜单,但我发现 _
菜单项助记符无法触发菜单命令。使用 alt
菜单导航(即在我的 Window 菜单下)打开菜单时,项目显示下划线:
var mi = Model.Window.MainMenuWindow;
mi.Items.Clear();
mi.Items.Add(new MenuItem { Header = "_Close Document", Command=Model.Commands.CloseActiveDocumentCommand });
mi.Items.Add(new MenuItem { Header = "C_lose All Documents", Command=Model.Commands.CloseAllDocumentsCommand, CommandParameter = "All" });
mi.Items.Add(new MenuItem { Header = "Close All _But This Document", Command = Model.Commands.CloseAllDocumentsCommand, CommandParameter="AllBut" });
var menuItems = Model.Window.GenerateContextMenuItemsFromOpenTabs();
if (menuItems.Count < 1)
return;
mi.Items.Add(new Separator());
foreach (var menu in menuItems)
{
mi.Items.Add(menu);
}
mi.IsSubmenuOpen = true;
这是它的样子:
助记符 属性 显示快捷方式,但热键无法触发相关命令。
当动态添加项目以使快捷方式链接起作用时,菜单是否需要做一些特殊的事情?
FWIW,我正在使用 MahApps.Metro,但我怀疑这并不是真正相关的。
将焦点设置在菜单上将解决此问题。
void ShowActiveTabsList()
{
WindowMenuCommand = new CommandBase((parameter, command) =>
{
var mi = Model.Window.MainMenuWindow;
mi.Items.Clear();
mi.Items.Add(new MenuItem { Header = "_Close Document", Command= Model.Commands.CloseActiveDocumentCommand });
mi.Items.Add(new MenuItem { Header = "Close _All Documents", Command = Model.Commands.CloseAllDocumentsCommand });
mi.Items.Add(new MenuItem { Header = "Close All _But This Document", Command = Model.Commands.CloseAllDocumentsCommand, CommandParameter="AllBut" });
var menuItems = Model.Window.GenerateContextMenuItemsFromOpenTabs();
if (menuItems.Count < 1)
return;
mi.Items.Add(new Separator());
foreach (var menu in menuItems)
{
mi.Items.Add(menu);
}
mi.IsSubmenuOpen = true;
// focus the menu to enable the mnemonics for the dynamically created submenus
mi.Focus();
mi.SubmenuClosed += (s,e) => ((MenuItem)s).Items.Clear();
}, (p, c) => true);
}
我正在动态创建子菜单,但我发现 _
菜单项助记符无法触发菜单命令。使用 alt
菜单导航(即在我的 Window 菜单下)打开菜单时,项目显示下划线:
var mi = Model.Window.MainMenuWindow;
mi.Items.Clear();
mi.Items.Add(new MenuItem { Header = "_Close Document", Command=Model.Commands.CloseActiveDocumentCommand });
mi.Items.Add(new MenuItem { Header = "C_lose All Documents", Command=Model.Commands.CloseAllDocumentsCommand, CommandParameter = "All" });
mi.Items.Add(new MenuItem { Header = "Close All _But This Document", Command = Model.Commands.CloseAllDocumentsCommand, CommandParameter="AllBut" });
var menuItems = Model.Window.GenerateContextMenuItemsFromOpenTabs();
if (menuItems.Count < 1)
return;
mi.Items.Add(new Separator());
foreach (var menu in menuItems)
{
mi.Items.Add(menu);
}
mi.IsSubmenuOpen = true;
这是它的样子:
助记符 属性 显示快捷方式,但热键无法触发相关命令。
当动态添加项目以使快捷方式链接起作用时,菜单是否需要做一些特殊的事情?
FWIW,我正在使用 MahApps.Metro,但我怀疑这并不是真正相关的。
将焦点设置在菜单上将解决此问题。
void ShowActiveTabsList()
{
WindowMenuCommand = new CommandBase((parameter, command) =>
{
var mi = Model.Window.MainMenuWindow;
mi.Items.Clear();
mi.Items.Add(new MenuItem { Header = "_Close Document", Command= Model.Commands.CloseActiveDocumentCommand });
mi.Items.Add(new MenuItem { Header = "Close _All Documents", Command = Model.Commands.CloseAllDocumentsCommand });
mi.Items.Add(new MenuItem { Header = "Close All _But This Document", Command = Model.Commands.CloseAllDocumentsCommand, CommandParameter="AllBut" });
var menuItems = Model.Window.GenerateContextMenuItemsFromOpenTabs();
if (menuItems.Count < 1)
return;
mi.Items.Add(new Separator());
foreach (var menu in menuItems)
{
mi.Items.Add(menu);
}
mi.IsSubmenuOpen = true;
// focus the menu to enable the mnemonics for the dynamically created submenus
mi.Focus();
mi.SubmenuClosed += (s,e) => ((MenuItem)s).Items.Clear();
}, (p, c) => true);
}