这应该非常简单:我有一个带有TextBox的ContentDialog。当应用程序在平板电脑上运行并启动对话框时,我希望选中TextBox中的文本并自动显示屏幕(虚拟)键盘。当然,必须在TextBox内部点击的用户的默认行为将导致键盘显示,但这是用户的一个额外步骤(并且文本选择丢失)。
XAML:
<ContentDialog ... >
<Grid>
<TextBox Name="TbInput" Text="AAA" />
</Grid>
</ContentDialog>
代码隐藏:
public MyDialog()
{
this.InitializeComponent();
this.Loaded += MyDialog_Loaded;
}
private async void MyDialog_Loaded(object sender, RoutedEventArgs e)
{
TbInput.SelectAll();
TbInput.Focus(FocusState.Programmatic);
}
更新
只是为了澄清,所需的行为是这样的:当在平板电脑或移动设备上运行时,当对话框打开时,我想要1)选择TextBox中的所有现有文本,并且2)显示虚拟键盘。
这样用户可以立即开始输入替换文本。
更新2
我确实想知道我是否正在处理错误或某些Windows 10设置:this page它明确指出
默认情况下,只要焦点移动到可编辑文本框并且通过触摸生成最新输入,就会显示屏幕触摸键盘。无论是以编程方式还是通过用户交互设置焦点,都会发生这种情况。
我可以验证我的编程设置焦点是否已成功设置为TextBox(Focus()
的返回值为true
),并且我的测试场景中的最新输入是触摸。< / p>
答案 0 :(得分:1)
TextBox将导致键盘显示,但这是用户的一个额外步骤(并且文本选择丢失)。
问题是您已执行SelectAll
方法,当您输入新文本时,所选区域将被覆盖。所以你需要将光标移动到文本的末尾。
private async void MyDialog_Loaded(object sender, RoutedEventArgs e)
{
TbInput.SelectionStart = TbInput.Text.Length;
TbInput.SelectionLength = 0;
TbInput.Focus(FocusState.Programmatic);
}
<强>更新强>
根据您的要求,您可以将SelectionStart
设置为0,将SelectionLength
设置为TbInput.Text.Length
,如下所示。
private async void MyDialog_Loaded(object sender, RoutedEventArgs e)
{
TbInput.SelectionStart = 0;
TbInput.SelectionLength = TbInput.Text.Length;
TbInput.Focus(FocusState.Programmatic);
}
您还可以使用TextBox PlaceholderText来实现这一点。输入新单词时,PlaceholderText
会自动解除。
<TextBox Name="TbInput" PlaceholderText="AAAAA" />
如果您在平板电脑中运行它,键盘将不会自动显示。您可以使用TryShow
方法显示键盘。
private async void MyDialog_Loaded(object sender, RoutedEventArgs e)
{
TbInput.SelectionStart = 0;
TbInput.SelectionLength = TbInput.Text.Length;
TbInput.Focus(FocusState.Programmatic);
InputPane.GetForCurrentView().TryShow();
}