1

奇怪的行为!当我点击地铁应用程序上的按钮时,一切正常,但是当我点击进入(KB 上的按钮)时,唯一发生的事情就是一切都被清除了!

这失败了

private void TextBox_KeyDown_1(object sender, KeyRoutedEventArgs e)
    {
        if (e.Key == VirtualKey.Enter)
        {
            textBlock.Text = textBox1.Text;
           // textBox1.Text = "";
        }
    }

这按预期工作

    private void Send_Click(object sender, RoutedEventArgs e)
    {

        textBlock.Text = textBox1.Text;
        textBox1.Text = "";
    }

我究竟做错了什么 ?

谢谢

4

2 回答 2

1

最好是在文本框上按 Enter 时,它实际上会模拟单击按钮,以确保两个操作实际上是相同的。

private void TextBox_KeyDown_1(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == VirtualKey.Enter)
    {
        this.Send.PerformClick();
    }
}

private void Send_Click(object sender, RoutedEventArgs e)
{
    textBlock.Text = textBox1.Text;
    textBox1.Text = "";
}

此外,正如克里斯所提到的,即使在这种情况下,您也不应该真正处理 KeyDown:您可以将表单的 AcceptButton 属性设置为发送按钮,这意味着当按下 Enter 时,按钮将被按下——即使没有专注。这类问题是使用 AcceptButton 属性的一个很好的例子。

于 2012-08-26T02:52:55.680 回答
0

我认为您正在尝试在用户按 Enter 时处理焦点。这是应用程序中的常见要求。至于你的奇怪行为,我无法解释。但我也不确定解释它与解决问题一样重要。因此,我可以向您展示处理输入和焦点的简单实现:

<StackPanel>
    <TextBlock FontSize="20" Foreground="White">One</TextBlock>
    <TextBox x:Name="T1" Width="1000" Height="100" KeyDown="T1_KeyDown_1" />
    <TextBlock FontSize="20" Foreground="White">Two</TextBlock>
    <TextBox x:Name="T2" Width="1000" Height="100" KeyDown="T2_KeyDown_1" />
</StackPanel>

private void T1_KeyDown_1(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Enter)
        T2.Focus(Windows.UI.Xaml.FocusState.Programmatic);
}

private void T2_KeyDown_1(object sender, KeyRoutedEventArgs e)
{
    if (e.Key == Windows.System.VirtualKey.Enter)
        T1.Focus(Windows.UI.Xaml.FocusState.Programmatic);
}

结果是完美的焦点控制。

于 2012-08-29T22:32:45.300 回答