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