2012-07-26 69 views
1

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

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

我已经尝试了一些事情:

  • 添加KeyDown事件的ScrollViewer中,但它从来没有被击中。
  • 在滚动查看器中将istabstop设置为false
  • 将我的scrollviewer中的grid上的keyeventargs设置为“已处理”为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点起这样,原因是becasue的ScrollViewer中吃keydown事件,可能使滚动发生。尽管如此,我还没有找到解决方法。有些人说他把他的“IsTabStop”设置为假,但这没有任何区别。捕捉KeyUp确实有效,但为防止按键滚动太迟了。我最后的手段是不使用向上/向下键来实现我想要的功能,但在cellgrid中上下需要上/下键,这只是逻辑。

我很感谢这方面的任何帮助和想法,因为我真的在这个问题上停滞不前。

+0

你是如何实施导航系统的?在窗口中键入绑定?通过处理PreviewKeyDown? – GameAlchemist 2012-07-26 13:22:39

+0

@VincentPiel:更新了问题,你可以看到我现在如何获得我的活动。 – Terry 2012-07-26 14:13:17

回答

0

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

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

2

如果您处理按键隧道事件PreviewKeyDown,您可以获取该事件的OriginalSource,然后尝试查找其可视滚动视图祖先,该滚动视图祖先将成为ScrollViewer。如果你找不到ScrollViewer的祖先,那么就像你已经做的那样处理你的密钥。如果你找到一个,那么什么都不要做。

+0

我的第三个要点是你的建议:我抓住事件,并设置e.Handled = true。问题是每次需要执行自定义时,即使可视化父项都是滚动查看器。我只是不想让它滚动。 – Terry 2012-07-26 15:14:15

+0

所以你需要赶上它,如果它来自scrollviewer的后代(e.Handled = true在PreviewKeyDown)然后重新发送密钥从另一个控制... – GameAlchemist 2012-07-26 21:49:25

+0

或者我不知道如果你不应该在后面的代码中处理密钥。少了'美丽',但更简单的解决方案导致更好的代码。 – GameAlchemist 2012-07-26 21:50:56