2010-06-20 76 views
5

我有,我已经定义了使用密钥手势按Ctrl +按Ctrl +自定义命令WPF应用程序。我的窗口有一个TextBoxScrollViewerTextBox具有焦点按Ctrl +按Ctrl +将光标移动到下一个或前一个单词,这是很好的开始。制作的ScrollViewer不能捕捉控制左,控制权在WPF

但在ScrollViewer它使水平滚动的举动,就好像我刚刚按下。什么是允许按Ctrl +按Ctrl +事件冒泡从我ScrollViewer到窗前,Command定义的最简单的方法?

回答

4

所以我做了以下

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); 
    } 
} 

我认为,关键是要了解该事件在顶部开始,工作是一路下滑得到了这个工作。然后在备份每一个“层”的过程中检查句柄布尔值,如果没有设置为true,它将确定它是否会执行某些操作,如果是,则进行设置。我需要为我的快捷方式短路这种行为,以便Handled在它恢复到Window级别时仍然是错误的。

+0

完美。谢谢! +1 – 2012-10-10 05:35:58

3

必须覆盖ScrollViewerPreviewKeyDown事件,并e.Handled = true和使用类似(this.Parent as FrameworkElement).RaiseEvent(e);该事件传递给家长,如果按下键是你分配给你的命令的按键组合之一。

+0

这是滚动查看器(在WPF中)的正确答案。 OnKeyDown事件不会在箭头键上触发,但是这样做。谢谢! – 2016-02-26 17:04:56