【发布时间】:2014-04-07 17:28:24
【问题描述】:
我了解 WPF 中的基本事件路由/冒泡(但显然还不够)...我想要做的是在我的 WPF 桌面应用程序中使用基本的键盘快捷键。例如,我有一个 ListBox,当用户按下 Page-Up 或 Page-Down (任何东西都可以在应用程序中聚焦)时,我希望列表框如果适用,请选择其上一项或下一项。
这是我目前所拥有的,但它不起作用。这是一个名为“Main”的窗口的构造函数:
public Main()
{
InitializeComponent();
// Initialize keyboard shortcuts
KeyDown += (s, e) =>
{
var viewModel = GetActiveViewModel();
if (e.Key == Key.PageUp)
{
viewModel.SelectPreviousItem();
e.Handled = true;
}
else if (e.Key == Key.PageDown)
{
viewModel.SelectNextItem();
e.Handled = true;
}
};
}
与此代码不同的是,活动控件正在“窃取”事件并实现默认行为,例如如果我选择了一个文本框,则文本框正在移动光标,如果我选择了列表框,则列表框会将所选索引移动一个“页面”,而不是像我想要的那样移动单个项目。
如何指示 WPF “忽略”任何默认键盘挂钩并用我自己的逻辑替换它们?我了解我将“覆盖”某些控件的默认行为(例如,文本框中的 Page-Up/Page-Down 将不再移动光标),没关系,这就是我想要的。
【问题讨论】:
-
永远记住最小意外的原则。如果我在应用程序中按下“向上翻页”按钮,它向上移动一项,我会感到困惑和恼火。我按上一页是因为我想上一页。
-
这些不是我的要求,它们是业务应用程序的要求。我了解用户体验原则,但我需要实现这一点。如果它让你感觉更好,假装快捷方式将是
Ctrl+PageUp。 ;)
标签: c# .net wpf keyboard-shortcuts