【问题标题】:In UWP, how can the virtual keyboard be automatically show with the launch of a ContentDialog with TextBox?在 UWP 中,如何在启动带有 TextBox 的 ContentDialog 时自动显示虚拟键盘?
【发布时间】:2018-08-21 20:13:11
【问题描述】:

这应该很简单:我有一个带有文本框的 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),并且我的测试场景中的最新输入是通过触摸。

【问题讨论】:

    标签: uwp


    【解决方案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();
    }
    

    【讨论】:

    • 我想要的是在 TextBox 中选择的所有文本,以及显示的虚拟键盘。我希望用户只需开始输入即可替换现有文本
    • 这仍然不起作用。主要问题是没有选择文本;问题是键盘没有自动弹出。
    • 我有两台安装了 Fall Creators Update 的不同 Windows 10 平板电脑,除非您实际点击文本框,否则它们都不会弹出屏幕键盘
    • 我已经尝试在平板电脑上运行它,并且我已经编辑了答案
    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2011-03-17
    • 2019-11-16
    • 1970-01-01
    相关资源
    最近更新 更多