输入后的UWP XAML文本框焦点

时间:2017-01-01 18:24:13

标签: c# xaml textbox uwp focus

我有一个这样的菜单:

enter image description here

我希望如果光标位于ValorInsTextBox(Valor文本框)上并按Enter键,应用程序将调用按钮InserirBtn_ClickAsync(Inserir Button),并在此过程之后,光标将返回PosicaoInsTextBox(PosiçãoTextbox)。 我使用Key_Down制作了一些方法,但发生了一些奇怪的事情。看代码:

private void PosicaoInsTxtBox_KeyDown(Object sender, KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Enter)
    {
        InserirBtn_ClickAsync(sender, e);

        PosicaoInsTxtBox.Focus(FocusState.Programmatic);
    }
}

private void ValorInsTxtBox_KeyDown(Object sender, KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Enter)
    {
        InserirBtn_ClickAsync(sender, e);

        if (PosicaoInsTxtBox.IsEnabled)
        {
            PosicaoInsTxtBox.Focus(FocusState.Programmatic);
        }
        else
        {
            ValorInsTxtBox.Focus(FocusState.Programmatic);
        }
    }
}

当我调试代码时,当ValorInsTextBox处于焦点时按Enter键,方法ValorInsTextBox_KeyDown启动,一切顺利。当它到达网上时:

PosicaoInsTxtBox.Focus(FocusState.Programmatic);

它执行方法PosicaoTextBox_KeyDown并开始执行它。我不知道为什么!有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以在ValorInsTxtBox_KeyDown事件处理程序中将KeyRoutedEventArgs的Handled属性设置为true,以防止调用PosicaoInsTxtBox_KeyDown事件处理程序:

private void ValorInsTxtBox_KeyDown(Object sender, KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Enter)
    {
        InserirBtn_ClickAsync(sender, e);

        if (PosicaoInsTxtBox.IsEnabled)
        {
            PosicaoInsTxtBox.Focus(FocusState.Programmatic);
        }
        else
        {
            ValorInsTxtBox.Focus(FocusState.Programmatic);
        }
    }
    e.Handled = true;
}

在PosicaoInsTxtBox_KeyDown事件处理程序中执行相同的操作,以防止在Posicao“TextBox中按Enter键时再次调用它:

private void PosicaoInsTxtBox_KeyDown(Object sender, KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Enter)
    {
        InserirBtn_ClickAsync(sender, e);

        PosicaoInsTxtBox.Focus(FocusState.Programmatic);
    }
    e.Handled = true;
}