处理FlipView的KeyDown事件中的箭头键

时间:2012-12-18 14:18:49

标签: c# .net xaml windows-runtime windows-store-apps

我在Windows应用商店应用中使用FlipView,它显示了一个项目列表。 FlipView应该在水平轴上翻转它的项目(这是有效的)。此外,这些项目位于ScrollViewer中,并且通常高于显示的高度,因此有一个垂直滚动条。

我希望用户能够使用向上/向下箭头键滚动,但使用向左和向右箭头键进行翻转。

现在,所有箭头键都会触发翻转。

我尝试了很多东西,使用Behaviors,注册到KeyDown事件,但是箭头Keys没有触发KeyDown事件。

我也尝试在CoreWindow.KeyDown事件中注册,但事件到达那里已经处理过,所以我无法做任何事情来防止翻转视图翻转。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

看起来您无法使用标准密钥事件。

试一试:在你的XAML中,在FlipView之后放置一个Grid。所以你会有

<FlipView>...</FlipView>
<Grid KeyUp="grid_KeyUp" />

在这种情况下,如果您可以捕获它,请将事件设置为已处理,以便它不会冒泡到FlipView。然后,您可以通过处理相应的键,使用此事件处理程序手动导航flipview(或滚动它)。

答案 1 :(得分:0)

您可以通过将其IsTabStop属性设置为false来更改FlipViewItems行为;

 <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Grid.Resources>
        <Style TargetType="FlipViewItem">
            <Setter Property="IsTabStop" Value="False"/>
        </Style>
    </Grid.Resources>

    <FlipView x:Name="FlippOut">
    ...

这将隐式设置FlipViewItem的样式不是tabstop。这样,您的滚动查看器将获得所有制表位。然后,您可以在ScrollViewer上使用AddHandler捕获其KeyDown事件,如果它是向左或向右,则翻转flipview。

一句警告但是,在FlipViewItem上更改此属性似乎确实在某些情况下使FlipView闪烁,例如当您手动将SelectedIndex设置为某些内容时(不确定在这种情况下它是否会出现问题或不)。我刚刚发布了关于MSDN论坛中闪烁的信息,还在等待回复,看看它是否是他们的结尾或其他内容的错误:http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/ffd5fe5d-de6e-4f22-82b7-e7cd82d488ad

值得一试。