在UWP中,如何使用TextBox启动ContentDialog来自动显示虚拟键盘?

时间:2018-03-13 14:12:11

标签: uwp

这应该非常简单:我有一个带有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>

1 个答案:

答案 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();
}