如何解决ScrollViewer通过单击以选择NumberBox的空格
我有一个带有ScrollViewer和NumberBox的简单UWP项目。 当用户单击以空格时,ScrollViewer会选择xaml文件中的第一个NumberBox。
guides(shape = guide_legend(title = "F"),color = guide_legend(title = "F"))
但是,如果在上方添加诸如Combobox之类的项目,则ScrollViewer不会选择NumberBox
...
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
...
<ScrollViewer>
<TextBlock Text="Some text" />
<muxc:NumberBox/>
</ScrollViewer>
如果我删除ScrollViewer,则当用户单击以隐藏空白时,NumberBox将不会选择。
<ScrollViewer>
<TextBlock Text="Some text" />
<ComboBox />
<muxc:NumberBox/>
</ScrollViewer>
该如何解决?
解决方法
在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">
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。