uwp - 我无法在我的 Xbox UWP 应用弹出窗口中获得选择框
问题描述
我创建了一个弹出窗口,上面有一些按钮,但我无法选择这些按钮,并且 XBox 默认选择框也不会出现在按钮周围。
<Grid>
<StackPanel HorizontalAlignment="Center" Margin="0,50,0,0">
<Button Content="Show Popup Flyout" Click="ShowFlyoutPopup" />
</StackPanel>
<Popup x:Name="logincontrol1" IsOpen="False" IsLightDismissEnabled="True">
<Popup.ChildTransitions>
<TransitionCollection>
<PaneThemeTransition />
</TransitionCollection>
</Popup.ChildTransitions>
<StackPanel Orientation="Vertical" Background="#313131" Width="1000" Height="500" x:Name="pop" Margin="0,100,0,0" >
<StackPanel>
<GridView ItemsSource="{Binding GamesList}" >
<GridView.ItemTemplate>
<DataTemplate x:Name="testtemp">
<Button x:Name="SwapBtn" Command="{Binding TestClick,Mode=OneWay}">
<StackPanel Width="202" VerticalAlignment="Top">
<Image Source="{Binding ImageUrl}" Height="324"/>
<StackPanel Background="Black" Padding="19,9,0,0">
<TextBlock FontWeight="Semibold" TextTrimming="CharacterEllipsis" FontFamily="Segoe Pro" Foreground="White" TextAlignment="Left" FontSize="24" Text="{Binding Title}" TextWrapping="Wrap" Height="65"/>
<TextBlock FontFamily="Segoe Pro" Foreground="White" TextAlignment="Left" FontSize="16" Text="{Binding Price}" Margin="0,48,0,0"/>
</StackPanel>
</StackPanel>
</Button>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</StackPanel>
</StackPanel>
</Popup>
</Grid>
背后的代码:就像这样,我无法将注意力集中在弹出窗口上。我认为它应该自动工作。
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void ShowFlyoutPopup(object sender, RoutedEventArgs e)
{
if (!logincontrol1.IsOpen)
{
RootPopupBorder.Width = 646;
logincontrol1.HorizontalOffset = Window.Current.Bounds.Width - 1485;
logincontrol1.VerticalOffset = Window.Current.Bounds.Height - 840;
logincontrol1.IsOpen = true;
}
}
}
}
焦点不在弹出窗口中,我无法使用游戏手柄与之交互。
解决方案
我会处理弹出窗口的打开事件,
<Popup x:Name="logincontrol1" IsOpen="False" IsLightDismissEnabled="True" Opened="Logincontrol1_OnOpened">
弹出数据模板中的控件不会出现在页面/视图的可视化树上,它会有自己的可视化树,为此您可以使用 VisualTreeHelper 获取弹出窗口内的控件以设置焦点。
private void Logincontrol1_OnOpened(object sender, object e)
{
Popup popup = sender as Popup;
if (popup != null)
{
Button button = FindElementInVisualTree<Button>(mygrid);
button?.Focus(FocusState.Programmatic);
}
}
private T FindElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
var count = VisualTreeHelper.GetChildrenCount(parentElement);
if (count == 0) return null;
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(parentElement, i);
if (child != null && child is T)
return (T)child;
else
{
var result = FindElementInVisualTree<T>(child);
if (result != null)
return result;
}
}
return null;
}
推荐阅读
- python - 如何以表格形式显示 azure 资源 python SDK
- angular - 如何修复:ngRx 中的“TypeError:实体不可迭代”
- unit-testing - 如何最好地对使用 IServiceGateway 调用其他内部服务的 ServiceStack 服务进行单元测试
- shell - 如何在命令中使用空格来使用别名 cd 到目录及其子目录?
- reactjs - 我使用了 npm cache clean --force 并且在我 create-react-app 时发生了错误
- c# - 分离后 Context.SaveChangesAsync() 不起作用
- javascript - 在 React Native 项目中更改数据
- javascript - MongoDB中的密钥在身份验证中不起作用
- excel - 将许多下拉框重置为空值Excel VBA
- oracle - 如何在同一个查询和同一个表中添加两个选择命令的结果 - Oracle SQL