silverlight keydown事件不会触发箭头键

时间:2008-10-21 18:01:03

标签: silverlight key keydown

我在scrollview中有一个画布。我将一个keydown事件处理程序附加到scrollview。对于大多数键,处理程序被调用。

但是,对于箭头键,不会调用处理程序。而是滚动视图以适当的方向滚动。

我还将一个keyup处理程序附加到scrollview,并且为箭头键调用了keyup。

有没有办法在这里获得箭头按键事件?

4 个答案:

答案 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. 使用PreviewKeyDown事件,我认为这就是它的名称。它可以让你在控件消耗之前进入事件。
  2. 尝试mblandfo的建议,虽然如果你这样做,你可能会将整个事情包装在一个用户控件中,以隐藏你在其余代码中所做的事情。
  3. 向Canvas对象添加一个键处理程序,您可以在那里捕获事件,并通过您自己的事件“冒泡”它。
  4. 除了1)所有这些都算作黑客,真的,但祝你好运,我希望其中一个适合你!

答案 3 :(得分:-1)

“使用PreviewKeyDown事件,我认为这就是它所谓的。它可以让你在控件消耗它之前得到它。”

这很有效。只需设置事件参数“Handled = true”,ScrollViewer(或ListBox)在您处理完事件后就不会抓住它。我不需要为ListBox使用IsTabStop属性;那反正似乎没有做任何事情。