我了解WPF中基本的事件路由/冒泡(显然还不够)...我想做的是在我的WPF桌面应用程序中使用基本的键盘快捷键。例如,我有一个ListBox,当用户按下Page-Up或Page-Down(应用程序中可能会聚焦任何内容)时,如果适用,我希望ListBox选择其上一个或下一个项目。
这是我目前拥有的,但它不起作用。这是一个名为“Main”的窗口的构造函数:
这是我目前拥有的,但它不起作用。这是一个名为“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
。;) - qJake