我有一个位于scrollview内部的canvas。我将keydown事件处理程序附加到了scrollview上。对于大多数键,处理程序都会被调用。
然而,对于箭头键,处理程序不会被调用。相反,scrollview会朝着相应的方向滚动。
我还将keyup处理程序附加到了scrollview上,对于箭头键,keyup确实会被调用。
在这里有没有任何方法可以获取箭头键按下事件?
我有一个位于scrollview内部的canvas。我将keydown事件处理程序附加到了scrollview上。对于大多数键,处理程序都会被调用。
然而,对于箭头键,处理程序不会被调用。相反,scrollview会朝着相应的方向滚动。
我还将keyup处理程序附加到了scrollview上,对于箭头键,keyup确实会被调用。
在这里有没有任何方法可以获取箭头键按下事件?
只需使用KeyUp事件即可。非常好用。
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()方法。
使用PreviewKeyDown事件,我认为那就是它的名字。这可能会让您在控件消耗事件之前获取该事件。
这很有效。只需设置事件参数"Handled = true",然后ScrollViewer(或ListBox)在您处理完事件后不会再抓住它。虽然我没有使用ListBox的IsTabStop属性,但它似乎也没有起到任何作用。