【发布时间】:2012-07-30 21:18:08
【问题描述】:
我有一个包含子视图的滚动查看器。如果该子视图中的任何内容具有焦点并且我按下向下/向上键,则内容向下/向上滚动。
如果我不是刚刚实现了一个基于箭头键的导航系统,这不会是一个问题。所以我使用这 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 确实有效,但为时已晚,无法阻止键滚动。我最后的办法是不要使用向上/向下键来做我想要的,但是在单元格中向上和向下需要向上/向下键,这只是逻辑。
感谢您对此的任何帮助和想法,因为我真的被这件事困住了。
【问题讨论】:
-
您的导航系统是如何实现的?在窗口中使用键绑定?通过处理 PreviewKeyDown ?
-
@VincentPiel:更新了问题,你可以看到我现在是如何得到我的事件了。
标签: vb.net xaml silverlight-4.0 scroll