单击按钮和虚拟键盘输入键 Windows Phone 8

Button click and virtual keyboard enter key Windows Phone 8

我正在为 windows phone 开发应用程序。我有一个登录屏幕,用户必须在其中输入用户名并单击 UI 中的登录按钮或 phone 虚拟键盘中的回车键。我分别捕获这两个事件。 LOGIN 按钮有一个 'Click' 事件让用户登录,还有一个 'KeyDown' 事件用于虚拟键盘中的回车键,它的代码与 Click 事件的代码相同。这些活动运作良好。一旦按下登录按钮或回车键,它就会让用户登录。 但仅当登录按钮或回车键被按下两次时。事件在第一次点击时被捕获(我看到页面正在刷新)但只有第二次点击将用户带入应用。这个问题有什么可能的想法吗? 早些时候我没有登录按钮,只使用了虚拟键盘中的回车键,第一次点击时一切正常

问候 卡尔提克

刚刚创建了运行良好的简单示例,请尝试重现它。 Xaml:

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

代码隐藏:

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" 方法在每次单击按钮或键盘输入时调用。

我不确定我的做法是否错误。理论上,如果 HandleAll() 方法的逻辑同时出现在 Button_click 和 key_down 事件中,它应该给出相同的结果(尽管性能相对较差)。现在我发现问题不是因为在两个事件中使用了相同的逻辑(没有 HandleAll()),而是因为在 windows phone 中创建了新的 AppSettings。以下解决了我的问题:

     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 phone 应用程序时 没有为应用程序 创建新设置。

但是 Vladimir 上面提供的答案一开始不会让我陷入这个问题,而且 Vladimir 的答案是有效的(space 和时间)。

谢谢你弗拉基米尔。我很好奇为什么我之前的逻辑不起作用,并发现 windows 应用程序需要在用户通过 button_click 或 key_down 事件登录时设置新设置