【问题标题】:Handle arrow keys in KeyDown event of FlipView在 FlipView 的 KeyDown 事件中处理箭头键
【发布时间】:2012-12-18 14:18:48
【问题描述】:

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

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

现在,所有方向键都会触发翻转。

我尝试了很多事情,使用行为,注册到 KeyDown 事件,但箭头键没有触发 KeyDown 事件。

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

有什么建议吗?

【问题讨论】:

  • 我知道已经很晚了,但this 可能是您问题的答案。

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


【解决方案1】:

看起来您将无法使用标准键事件。

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

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

在此事件中,如果您可以捕获它,请将事件设置为已处理,这样它就不会冒泡到 FlipView。然后,您可以通过处理相应的键,使用此事件处理程序(或滚动它)手动导航翻转视图。

【讨论】:

  • 不幸的是,这不起作用,我没有收到 KeyDown 事件。 FlipView 会吃掉一切。
  • 加载时,使用键盘焦点类型聚焦网格(也可以尝试编程)。
  • 我检查过了,但您好像无法聚焦网格?
  • 奇怪,也许不是,因为它不需要输入。然后只需使用文本框并将其变小(或将高度和宽度设置为 0)。当页面加载时,只需关注它并处理键
  • 我尝试了你的建议,我能够得到事件,但它也使 FlipView 无法用鼠标使用。由于它永远不会获得焦点(一旦获得焦点,您就无法再在其他任何地方处理它),因此没有滚动条和翻转按钮供用户单击。我真的只想禁用垂直方向输入的处理,或者希望翻转视图意识到里面有一个滚动查看器并将事件传递给它。
【解决方案2】:

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

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

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

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

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

也许值得一试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2018-06-30
    • 2020-09-16
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多