uwp xbox app在Pivot Control中的XYNavigation

时间:2018-02-08 14:30:05

标签: xaml uwp xbox gamepad xbox-one

好的,所以我是一位经验丰富的uwp开发人员,但却是uwp xbox平台的初学者。我正在尝试为我的应用设置XY导航,并尝试用键盘测试它(因为我自己没有自己的xbox)

我正在使用Pivot视图,我可以轻松地使用右箭头键和左箭头键在枢轴项之间导航,这是有道理的。但是当使用pivot选项选择我的设置页面时(设置枢轴标题被聚焦并且设置枢轴项目在视图中)然后我尝试将我的焦点垂直向下移动到设置页面中的第一个控件(单选按钮)但我无法要做到这一点,焦点仍然在设置标题上,并且不会在页面上向下移动。所以

  

如何将焦点从枢轴标题向下移动到页面内的第一个控件上,反之亦然,即:当第一个控件聚焦时,我应该向上移动回到的标题那个页面的数据,因为我认为这是uwp xbox上带有数据透视控制的传统导航吗?

     

其次,我观看的文档和 xbox app dev 视频建议将重点放在一个有意义的元素上,当应用加载时,应该使用 this.Focus( )方法或是否有更有效的方法来使用xaml?

CODE

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>

1 个答案:

答案 0 :(得分:1)

MSDN列出了几种XY导航可能无法按预期运行的情况:

  1. IsTabStop或Visibility属性设置错误。
  2. 获得焦点的控件实际上比您想象的要大 - XY导航会查看控件的总大小(ActualWidth和ActualHeight),而不仅仅是控件中呈现一些有趣内容的部分。
  3. 一个可聚焦控件位于另一个之上 - XY导航不支持重叠的控件。
  4.   

    如果在修复这些问题后XY导航仍然没有达到预期的效果,您可以使用Overriding the default navigation中描述的方法手动指向要获得焦点的元素。

    请先检查这些情况,之后,如果仍然无法解决此问题。请提供a Minimal, Complete, and Verifiable example。我会帮你诊断它。

相关问题