我有一个WPF应用程序,我已经定义了使用关键手势的自定义命令 Ctrl + ←和 Ctrl + → 。我的窗口有TextBox
和ScrollViewer
,当TextBox
有焦点 Ctrl + ←和 Ctrl + →将光标移动到下一个或上一个单词的开头,这很好。
但在ScrollViewer
上它使水平滚动移动,好像我只按了←或→。什么是允许 Ctrl + ←和 Ctrl + →事件从我的{{冒出来的最简单方法1}}到定义ScrollViewer
的窗口?
答案 0 :(得分:6)
所以我通过以下方式实现了这个目标
public class MyScrollViewer : ScrollViewer
{
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyboardDevice.Modifiers == ModifierKeys.Control)
{
if (e.Key == Key.Left || e.Key == Key.Right)
return;
}
base.OnKeyDown(e);
}
}
我认为诀窍是要了解事件从顶部开始并且正在向下运行。然后在回来的路上,每个“层”检查Handled布尔值,如果它没有设置为true,它将确定它是否会执行某些操作并设置它。我需要为我的快捷方式短路这种行为,以便Handled在返回Window级别时仍然是假的。
答案 1 :(得分:3)
您必须覆盖ScrollViewer
的{{1}}事件并设置PreviewKeyDown
并使用e.Handled = true
之类的内容将事件传递给父级,前提是按下的按键是其中一个键您分配给命令的组合。