代码之家  ›  专栏  ›  技术社区  ›  juharr

使scrollviewer不在WPF中捕获左控件和右控件

  •  6
  • juharr  · 技术社区  · 15 年前

    我有一个WPF应用程序,其中我定义了使用按键手势的自定义命令 Ctrl键 + Ctrl键 + . 我的窗户有个洞 TextBox 和一个 ScrollViewer 文本框 有焦点 Ctrl键 Ctrl键 + 将光标移到下一个或上一个单词的开头即可。

    滚动条 它使水平滚动移动,好像我刚刚按下 . 最简单的方法是什么 Ctrl键 + Ctrl键 + 到窗户那里 Command 定义了什么?

    2 回复  |  直到 13 年前
        1
  •  7
  •   juharr    15 年前

    所以我做了以下工作

    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仍然是false。

        2
  •  4
  •   decyclone    15 年前

    你必须重写 ScrollViewer PreviewKeyDown 事件和集合 e.Handled = true 并使用类似于 (this.Parent as FrameworkElement).RaiseEvent(e); 如果按下的键是指定给命令的组合键之一。