将焦点一项一项地移动到 GridView 项上

Move focus on GridView item one by one

我正在为 pc 和 xbox 设计应用程序。现在面临一个棘手的问题。

我有一个 GridView,它启用了一行。所以焦点可以移动left/right。我已经计算了项目的宽度,所以在用户可视区域,总是有4个项目可见。

在我的电脑上,当焦点移动时 left/right,它似乎符合预期。 但是在我的xbox上,当向右移动项目时,项目总是显示一部分。

更清楚,这里有两个视频。

Pc

Xbox

xbox 上的注意事项,当我将焦点移至 ,下一项显示其中的一部分。

所以,如何禁用下一项显示了其中的一部分,就像pc一样。当焦点在它上面时,该项目显示。当焦点不在上面时,不显示。

PreviewKeyDown事件中,我使用

                case VirtualKey.Right:
                case VirtualKey.GamepadDPadRight:
                case VirtualKey.GamepadLeftThumbstickRight:
                    if (itemIndexInCurrentRiver + 1 <= currentRiver.Items.Count - 1)
                    {
                        currentRiver.Focus(FocusState.Programmatic);

                        GridViewItem item = new GridViewItem();
                        item = currentRiver.ContainerFromIndex(listIndexsInEachRiver[riverIndexInAllRivers]) as GridViewItem;
                        listIndexsInEachRiver[riverIndexInAllRivers] = itemIndexInCurrentRiver + 1;

                        item.Focus(FocusState.Programmatic);
                        item.IsSelected = true;
                        item.StartBringIntoView();

                        e.Handled = false;
                    }
                    else
                        e.Handled = true;
                    break;

我查看了你的视频记录,如果你想让 Xbox GridView 显示与 pc 相同,你需要手动关闭过扫描边框。

Xbox 设置 > 显示和声音> 视频输出,在“高级”下 select “视频保真度和过扫描” 您将看到一个选项,上面写着“应用程序可以添加边框”,如果关闭则关闭。

不幸的是,我们没有提供 api 可以通过编程方式关闭。请随意post就UserVoice吧。您也可以为我们分享代码示例,我们将检查是否有其他解决方法。