停止滚动查看器向上/向下滚动键

时间:2012-07-26 08:09:34

标签: vb.net xaml silverlight-4.0 scroll

我有一个包含子视图的scrollviewer。如果该子视图中的任何内容具有焦点,并且我按下/向上键,则内容向下/向上滚动。

如果我没有实施基于箭头键的导航系统,这不会有问题。所以我使用这4个箭头键更容易在对象之间导航。现在的问题是当用户按下或按下时内容会滚动。我想禁用滚动行为。

我已经尝试了一些事情:

  • 将一个KeyDown事件添加到scrollviewer,但它永远不会被命中。
  • 在scrollviewer上将istabstop设置为false
  • 在我的scrollviewer内的网格上将keyeventargs“handling”设置为true,之前调用,然后我的代码被执行(导航),所以也不能使用它。

修改

这是在XAML中处理事件的方式:

<i:Interaction.Behaviors>
    <catel:KeyPressToCommand Command="{Binding CancelCellInputCommand}" Key="Escape" />
    <catel:KeyPressToCommand Command="{Binding LeftArrowNavigationCommand}" Key="Left"/>
    <catel:KeyPressToCommand Command="{Binding UpArrowNavigationCommand}" Key="Up"/>
    <catel:KeyPressToCommand Command="{Binding RightArrowNavigationCommand}" Key="Right"/>
    <catel:KeyPressToCommand Command="{Binding DownArrowNavigationCommand}" Key="Down"/>
</i:Interaction.Behaviors>

我可能会尝试阻止我的内容在按键上/向下滚动的任何其他解决方案吗?

编辑2:

经过更多的研究,我发现子弹点1的行为就是这样,因为scrollviewer吃了keydown事件,可能是为了让滚动发生。虽然我还没有办法解决这个问题。有人说他把他的“IsTabStop”设置为假,但这根本没有区别。捕获KeyUp确实有效,但是为了防止键滚动为时已晚。我的最后一招是不要使用向上/向下键来实现我想要的功能,但在单元格网格中上下移动需要向上/向下键,这只是逻辑。

我很感激任何帮助和想法,因为我真的坚持这件事。

2 个答案:

答案 0 :(得分:2)

如果你处理了按键的隧道事件PreviewKeyDown,你可以获取事件的OriginalSource,然后尝试找到它的视觉祖先,它将是一个ScrollViewer。如果找不到ScrollViewer祖先,那么就像处理密钥一样处理密钥。如果找到一个,那么什么也不做。

答案 1 :(得分:0)

最后在Silverlight forums找到了一些内容。

毕竟,它类似于Vincent Piels解决方案,它使用PreviewKeyDown事件,但它需要一个自定义子(contentcontrol)来在XAML中使用该事件。