我有一个包含子视图的scrollviewer。如果该子视图中的任何内容具有焦点,并且我按下/向上键,则内容向下/向上滚动。
如果我没有实施基于箭头键的导航系统,这不会有问题。所以我使用这4个箭头键更容易在对象之间导航。现在的问题是当用户按下或按下时内容会滚动。我想禁用滚动行为。
我已经尝试了一些事情:
修改
这是在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确实有效,但是为了防止键滚动为时已晚。我的最后一招是不要使用向上/向下键来实现我想要的功能,但在单元格网格中上下移动需要向上/向下键,这只是逻辑。
我很感激任何帮助和想法,因为我真的坚持这件事。
答案 0 :(得分:2)
如果你处理了按键的隧道事件PreviewKeyDown,你可以获取事件的OriginalSource,然后尝试找到它的视觉祖先,它将是一个ScrollViewer。如果找不到ScrollViewer祖先,那么就像处理密钥一样处理密钥。如果找到一个,那么什么也不做。
答案 1 :(得分:0)
最后在Silverlight forums找到了一些内容。
毕竟,它类似于Vincent Piels解决方案,它使用PreviewKeyDown事件,但它需要一个自定义子(contentcontrol)来在XAML中使用该事件。