2015-02-27 6 views
1

Я разрабатываю приложение для телефона Windows. У меня есть экран входа в систему, где пользователь должен ввести свое имя пользователя и нажать кнопку LOGIN в пользовательском интерфейсе или клавишу ввода на виртуальной клавиатуре телефона. Я фиксирую оба события отдельно. Кнопка LOGIN имеет событие «Click», которое регистрирует пользователя, и есть событие «KeyDown» для ключа ввода на виртуальной клавиатуре, который имеет тот же код, что и для события Click. Мероприятия отлично работают. Он регистрирует пользователя один раз после нажатия кнопки входа или нажатия клавиши ввода. Но только если кнопка входа или клавиша ввода нажата дважды. Событие попадает в первый клик (я видел обновленную страницу), но только второй клик берет пользователя в приложение. Какие-нибудь возможные идеи вышли из этой проблемы? Раньше у меня не было кнопки ВХОД, используется только клавишу ввода в виртуальной клавиатуре, и все работали отлично в первый щелчокКнопка click и виртуальная клавиатура введите ключ Windows Phone 8

С уважением Karthik

ответ

5

Просто создали простой пример, который работал отлично, попробуйте воспроизвести его , Xaml:

<StackPanel Orientation="Horizontal"> 
    <TextBox KeyDown="TextBox_KeyDown"/> 
    <Button Click="Button_Click" VerticalAlignment="Top"/> 
</StackPanel> 

Code-за:

private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e) 
{ 
    if (e.Key == Windows.System.VirtualKey.Enter || e.Key == Windows.System.VirtualKey.Accept) 
     HandleAll(); 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    HandleAll(); 
} 

private void HandleAll() 
{ 
    //Hit breakpoint here 
} 

метод "HandleAll" вызывается каждый раз, когда-кнопки или клавиши Enter щелкнул.

0

Я не уверен, был ли мой подход неправильным. Теоретически, если логика метода HandleAll() присутствует как в событии Button_click, так и в key_down, она должна дать тот же результат (хотя и сравнительно низкая производительность). Теперь я обнаружил, что проблема связана не с использованием одной и той же логики в обоих событиях (без HandleAll()), а из-за создания новых AppSettings на телефоне Windows. Следующее решает вопрос для меня:

 private void Login_button_click(object sender, RoutedEventArgs e) 
    { 
     //Code 
     AppSettings settings = new AppSettings(); 
     settings.IsLoggedOutSetting = false; 
     //Code 
    } 
private void textbox_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      //code 
      AppSettings settings = new AppSettings(); 
      settings.IsLoggedOutSetting = false; 
      //code 
     } 
    }  

С вышеуказанным кодом проблема решена. Поэтому из моего наблюдения проблема заключалась в том, что не создавал новую настройку для приложения, когда пользователь пытается войти в приложение для подключения к окну.

Но ответ, приведенный выше Владимиром, не заставил меня в этом вопросе на первом месте, а ответ Владимира был эффективным (пространство и время).

Спасибо вам, Владимир. Мне было очень любопытно, почему моя предыдущая логика не работала и выяснилось, что приложение Windows нуждается в настройке нового параметра, когда пользователь регистрируется через события button_click или key_down.