1

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

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

我已经尝试了几件事:

  • 将 KeyDown 事件添加到滚动查看器,但它永远不会被击中。
  • 在滚动查看器上将 istabstop 设置为 false
  • 在我的滚动查看器内的网格上将 keyeventargs “handled”设置为 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 这样做的原因是因为滚动查看器吃掉了 keydown 事件,可能是为了使滚动发生。不过,我还没有找到解决它的方法。有人说他将他的“IsTabStop”设置为假,但这根本没有区别。捕捉 KeyUp 确实有效,但为时已晚,无法阻止键滚动。我最后的手段是不使用向上/向下键来满足我的需求,但是在单元格中向上和向下需要向上/向下键,这只是逻辑。

我将不胜感激任何帮助和想法,因为我真的被困在这件事上。

4

2 回答 2

2

如果您处理按键隧道事件 PreviewKeyDown,您可以获得该事件的 OriginalSource,然后尝试找到它的可视祖先,即 ScrollViewer。如果您找不到 ScrollViewer 祖先,请像以前一样处理您的密钥。如果你找到了,那就什么都不做。

于 2012-07-26T13:34:53.863 回答
0

终于在Silverlight 论坛上找到了一些东西。

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

于 2012-07-30T13:18:08.160 回答