UWP Xbox App Xynavigation在枢轴控制中



我是经验丰富的UWP开发人员,但是UWP Xbox平台的初学者。我正在尝试为我的应用程序设置XY导航,并尝试使用键盘进行测试(因为我自己不拥有Xbox(。

我正在使用枢轴视图,我可以轻松地在右箭头键和左箭头键之间导航,这很有意义。但是,当我使用枢轴选项选择我的设置页面时(设置枢轴标题是聚焦的,并且在"查看"设置枢轴项目中(,然后我尝试将焦点向下移动到"设置"页面中的第一个控件(无线电按钮(,但我无法为此,重点仍然放在设置标题上,并且不会在页面上向下移动。

因此,如何将焦点从枢轴标头向下移动到按下时页面内的第一个控件,反之亦然,即:当第一个控件焦点时,我应该向上移动以返回到该页面的Pivot ,因为我认为这是UWP Xbox上具有枢轴控制的传统导航,对吗?

其次,我观看的文档和 xbox App dev 视频建议将重点放在元素上,该元素有意义,当应用程序加载时,应使用 this.focus(focus((方法,还是有更有效的方法可以使用XAML?

代码:

pivot.xaml

<Grid x:Name="MainGrid">
    <Pivot x:Uid="PivotPage" x:Name="MainPivot" >
        <PivotItem x:Uid="PivotItem_OnNow">
            <Frame>
                <views:OnNowPage/>
            </Frame>
        </PivotItem>
        <PivotItem x:Uid="PivotItem_Guide">
            <Frame>
                <views:GuidePage/>
            </Frame>
        </PivotItem>
        <PivotItem x:Uid="PivotItem_Settings">
            <Frame>
                <views:SettingsPage/>
            </Frame>
        </PivotItem>
    </Pivot>
</Grid>

settings.xaml

<Grid>
    <Grid Margin="{StaticResource MediumLeftRightMargin}">
        <Grid.RowDefinitions>
            <RowDefinition Height="48"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <TextBlock
            Grid.Row="0"
            x:Uid="Settings_Title"
            x:Name="TitlePage"
            Style="{StaticResource PageTitleStyle}" />
        <StackPanel Grid.Row="1">
            <TextBlock
                x:Uid="Settings_Personalization"
                Style="{StaticResource SubtitleTextBlockStyle}" />
            <StackPanel Margin="{StaticResource SettingsSubheaderMargin}">
                <TextBlock
                    x:Uid="Settings_Theme"
                    Style="{StaticResource BodyTextStyle}" />
                <StackPanel Margin="{StaticResource EightTopMargin}">
                    <RadioButton
                        x:Uid="Settings_Theme_Light"
                        GroupName="AppTheme"
                        IsChecked="{x:Bind ViewModel.ElementTheme, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=Light, Mode=OneWay}"
                        Command="{x:Bind ViewModel.SwitchThemeCommand}">
                        <RadioButton.CommandParameter>
                            <xaml:ElementTheme>Light</xaml:ElementTheme>
                        </RadioButton.CommandParameter>
                    </RadioButton>
                    <RadioButton
                        x:Uid="Settings_Theme_Dark"
                        GroupName="AppTheme"
                        IsChecked="{x:Bind ViewModel.ElementTheme, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=Dark, Mode=OneWay}"
                        Command="{x:Bind ViewModel.SwitchThemeCommand}">
                        <RadioButton.CommandParameter>
                            <xaml:ElementTheme>Dark</xaml:ElementTheme>
                        </RadioButton.CommandParameter>
                    </RadioButton>
                    <RadioButton
                        x:Uid="Settings_Theme_Default"
                        GroupName="AppTheme"
                        IsChecked="{x:Bind ViewModel.ElementTheme, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=Default, Mode=OneWay}"
                        Command="{x:Bind ViewModel.SwitchThemeCommand}">
                        <RadioButton.CommandParameter>
                            <xaml:ElementTheme>Default</xaml:ElementTheme>
                        </RadioButton.CommandParameter>
                    </RadioButton>
                </StackPanel>
            </StackPanel>
            <TextBlock
                    x:Uid="Settings_About"
                    Style="{StaticResource SubtitleTextBlockStyle}"/>
            <StackPanel Margin="{StaticResource EightTopMargin}">
                <TextBlock
                    Text="{x:Bind ViewModel.VersionDescription, Mode=OneWay}" />
                <TextBlock
                    x:Uid="Settings_AboutDescription"
                    Margin="{StaticResource EightTopMargin}" />
                <HyperlinkButton
                    x:Uid="Settings_PrivacyTermsLink"
                    Margin="{StaticResource EightTopMargin}" />
            </StackPanel>
        </StackPanel>
    </Grid>
</Grid>

MSDN列出了几种XY导航可能无法按照您期望工作的情况:

  1. ISTABSTOP或可见性属性设置了错误。
  2. 控制焦点的控制实际上比您想象的要大 - XY导航着眼于控制的总大小(实际宽度和实际亮度(,而不仅仅是使某些有趣的控制的部分。
  3. 一个聚焦控制在另一个之上 - Xy导航不支持重叠的控件。

如果XY导航在解决这些问题后仍无法按照您期望的方式工作,则可以手动指出要使用覆盖默认导航中描述的方法获得焦点的元素。

请先检查这些方案,之后,如果您仍然无法解决此问题。请提供最小,完整和可验证的示例。我将帮助您诊断出我的身边。

最新更新