单击按钮和虚拟键盘输入键 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 事件登录时设置新设置
我正在为 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 事件登录时设置新设置