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

时间:2015-02-27 19:40:12

标签: c# xaml windows-phone-8 visual-studio-2013

我正在开发一款适用于Windows手机的应用。我有一个登录界面,用户必须输入用户名并点击界面中的LOGIN按钮或手机虚拟键盘中的回车键。我分别捕获了两个事件。 LOGIN按钮有一个“Click”事件,用于记录用户,并且虚拟键盘中的enter键有一个“KeyDown”事件,其代码与Click事件的代码相同。事件很好。一旦登录按钮或按下回车键,它就会记录用户。 但仅当按下登​​录按钮或输入键两次时。第一次点击时捕获事件(我看到页面正在刷新),但只有第二次点击才会将用户带入应用程序。从这个问题出来的任何可能的想法? 早些时候我没有LOGIN按钮,只使用了虚拟键盘中的回车键,第一次点击工作正常

此致 KARTHIK

2 个答案:

答案 0 :(得分:5)

刚创建的简单示例工作正常,尝试重现它。 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”方法。

答案 1 :(得分:0)

我不确定我的做法是否错误。从理论上讲,如果HandleAll()方法的逻辑存在于Button_click和key_down事件中,它应该给出相同的结果(尽管性能相差很差)。现在我发现问题不是由于在两个事件中使用相同的逻辑(没有HandleAll()),而是因为在Windows手机中创建了新的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应用程序时没有为应用程序创建新设置

但弗拉基米尔上面提供的答案不会让我首先涉及这个问题,弗拉基米尔的回答也是有效的(空间和时间)。

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