我在scrollview中有一个画布。我将一个keydown事件处理程序附加到scrollview。对于大多数键,处理程序被调用。
但是,对于箭头键,不会调用处理程序。而是滚动视图以适当的方向滚动。
我还将一个keyup处理程序附加到scrollview,并且为箭头键调用了keyup。
有没有办法在这里获得箭头按键事件?
答案 0 :(得分:2)
只需使用KeyUp事件即可。像魅力一样。
答案 1 :(得分:1)
我发现这个愚蠢的黑客让它发挥作用。将scrollview设置为不是tabstop使它不会吃掉关键事件..但是我在页面上有另一个文本框,突然之间总是有焦点,因为scrollview不再了。所以我通过让隐形文本框获得焦点来解决这个问题。
scrollView.IsTabStop = false;
invisibleTextBox.Foreground = new SolidColorBrush(Colors.Transparent);
invisibleTextBox.Background = new SolidColorBrush(Colors.Transparent);
Canvas.SetZIndex(invisibleTextBox, -1000);
invisibleTextBox.KeyDown += new KeyEventHandler(HandleKeyDown);
invisibleTextBox.KeyUp += new KeyEventHandler(HandleKeyUp);
编辑:我还必须将文本框从画布上移开,因为尽管看不见,但它的轮廓仍然显示出来。
第二次编辑:我使用了一个文本框,因为这是我发现可以捕获KeyDown事件的第一件事。但是,UserControl可以。因此,使用UserControl而不是不可见的文本框可能是更好的做法。如果需要,您可以在UserControl上调用Focus()。
答案 2 :(得分:0)
这是一个可能的答案 - 我没有机会测试这个。我过去遇到过类似的麻烦,当一个控件正在消耗这些事件之后你就可以了解它们。您可以尝试一些事项:
除了1)所有这些都算作黑客,真的,但祝你好运,我希望其中一个适合你!
答案 3 :(得分:-1)
“使用PreviewKeyDown事件,我认为这就是它所谓的。它可以让你在控件消耗它之前得到它。”
这很有效。只需设置事件参数“Handled = true”,ScrollViewer(或ListBox)在您处理完事件后就不会抓住它。我不需要为ListBox使用IsTabStop属性;那反正似乎没有做任何事情。