2017-01-01 3 views
0

У меня есть меню, как это:UWP XAML Textbox Фокус после Enter

enter image description here

Я бы хотел, что если курсор находится на ValorInsTextBox (Valor Textbox) и жму Enter, приложение вызвать кнопку InserirBtn_ClickAsync (кнопка Inserir), и после процесса курсор возвращается в PosicaoInsTextBox (текстовое поле Posição). Я использовал некоторые методы, используя 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); 
     } 
    } 
} 

Когда я отлаживать код, жму Enter, когда ValorInsTextBox находится в центре внимания, и метод ValorInsTextBox_KeyDown начинается, и все идет хорошо. И когда он приходит на линии:

PosicaoInsTxtBox.Focus(FocusState.Programmatic); 

он идет, чтобы выполнить метод PosicaoTextBox_KeyDown и начинает выполнять его. Я не знаю, почему! Кто-нибудь может мне помочь?

ответ

1

Вы можете установить Handled свойство KeyRoutedEventArgs истина в обработчик событий ValorInsTxtBox_KeyDown, чтобы предотвратить обработчик 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, чтобы предотвратить его если вы нажмете ENTER в Posicao "TextBox:

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; 
} 
+0

Решение этой проблемы. Большое вам спасибо! –