我有一个滚动视图内的画布。我将一个keydown事件处理程序附加到scrollview。对于大多数键,处理程序被调用。silverlight keydown事件不会触发箭头键
但是,对于箭头键,处理程序不会被调用。相反,scrollview会以适当的方向滚动。
我还附加了一个keyup处理程序的滚动视图和keyup确实被称为箭头键。
有没有办法在这里得到箭头键按下事件?
我有一个滚动视图内的画布。我将一个keydown事件处理程序附加到scrollview。对于大多数键,处理程序被调用。silverlight keydown事件不会触发箭头键
但是,对于箭头键,处理程序不会被调用。相反,scrollview会以适当的方向滚动。
我还附加了一个keyup处理程序的滚动视图和keyup确实被称为箭头键。
有没有办法在这里得到箭头键按下事件?
我发现这个愚蠢的黑客使其工作。将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);
编辑:我也不得不将文本框从画布上移开,因为尽管看不见,它的轮廓仍然显示出来。
第2编辑:我使用了一个文本框,因为这是我发现的第一件可以捕获KeyDown事件的东西。但是,UserControl可以。所以使用UserControl代替不可见的文本框可能会更好。如果需要,可以在UserControl上调用Focus()。
这是一个可能的答案 - 我还没有机会测试这个。尽管过去我也遇到类似的麻烦,但是在控制权消耗事件之前,你可以先看看它们。有几件事你可以尝试:
除了1)所有这些都算作黑客,真的,但祝你好运,我希望他们中的一个适合你! “
”使用PreviewKeyDown事件,我认为这就是它的名称,它可以让你在事件被控件占用之前得到它。“
This Works。只要将事件参数设置为“Handled = true”,ScrollViewer(或ListBox)就不会在处理完事件后抓住事件。虽然我不需要使用ListBox的IsTabStop属性;而且它似乎没有做任何事情。
只需使用KeyUp事件。奇迹般有效。
在WPF中工作,但silverlight没有预览关键字down – 2010-01-05 22:56:19