我是经验丰富的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导航可能无法按照您期望工作的情况:
- ISTABSTOP或可见性属性设置了错误。
- 控制焦点的控制实际上比您想象的要大 - XY导航着眼于控制的总大小(实际宽度和实际亮度(,而不仅仅是使某些有趣的控制的部分。
- 一个聚焦控制在另一个之上 - Xy导航不支持重叠的控件。
如果XY导航在解决这些问题后仍无法按照您期望的方式工作,则可以手动指出要使用覆盖默认导航中描述的方法获得焦点的元素。
请先检查这些方案,之后,如果您仍然无法解决此问题。请提供最小,完整和可验证的示例。我将帮助您诊断出我的身边。