ScrollViewer通过单击以选择NumberBox的空格

问题描述

我有一个带有ScrollViewer和NumberBox的简单UWP项目。 当用户单击以空格时,ScrollViewer会选择xaml文件中的第一个NumberBox。

guides(shape = guide_legend(title = "F"),color = guide_legend(title = "F"))

enter image description here

但是,如果在上方添加诸如Combobox之类的项目,则ScrollViewer不会选择NumberBox

...
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
...

<ScrollViewer>
   <TextBlock Text="Some text" />
   <muxc:NumberBox/>
</ScrollViewer>

enter image description here

如果我删除ScrollViewer,则当用户单击以隐藏空白时,NumberBox将不会选择。

<ScrollViewer>
   <TextBlock Text="Some text" />
   <ComboBox />
   <muxc:NumberBox/>
</ScrollViewer>

enter image description here

该如何解决?

解决方法

在ScrollViewer中,焦点将传递到其内容中的第一个可聚焦控件,因此,当ScrollViewer仅具有TextBlock和NumberBox时,NumberBox将自动获得焦点。当您在NumberBox前面添加ComboBox时,默认情况下ComboBox会获得焦点。另外,如果删除ScrollViewer,由于“网格”面板不是从Control派生的,因此它不是“可聚焦的”。当您单击空白处时,NumberBox将无法获得焦点。

如果要在单击空白位置时选择NumberBox,则可以尝试使用Control.Focus()方法将焦点设置在NumberBox上。例如:

.xaml:

<ScrollViewer PointerPressed="ScrollViewer_PointerPressed"  Tapped="ScrollViewer_Tapped">
    <StackPanel>
        <TextBlock Text="Some text" />
        <ComboBox></ComboBox>
        <muxc:NumberBox x:Name="MyNumberBox"/>
    </StackPanel>
</ScrollViewer>

.cs:

private void ScrollViewer_Tapped(object sender,TappedRoutedEventArgs e)
{
    if(IsClicked)
        MyNumberBox.Focus(FocusState.Programmatic);
    IsClicked = false;
}

private bool IsClicked { get; set; }

private void ScrollViewer_PointerPressed(object sender,PointerRoutedEventArgs e)
{
    IsClicked = true;
}
,

在单击以留空时禁用选择第一项

<ScrollViewer IsTabStop="True">

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...