在WPF中模拟按下"Enter"键

5

我试图在按钮事件中模拟按键操作。我可以使用下面的代码来模拟一些按键,例如Backspace,但是Enter无法正常工作。

我做错了什么?

private void btnEnter_Click(object sender, RoutedEventArgs e)
{
    tbProdCode.Focus();

    KeyEventArgs ke = new KeyEventArgs(
        Keyboard.PrimaryDevice,
        Keyboard.PrimaryDevice.ActiveSource,
        0,
        Key.Enter)
    {
        RoutedEvent = UIElement.KeyDownEvent
    };

    InputManager.Current.ProcessInput(ke);
}

有些东西告诉我它被执行得太早了,而不是在 tbProdCode 获得焦点时。尝试将设置焦点后的部分放在 Dispatcher.Invoke(() => { ... }); 中。如果不是这种情况,请问您能否解释一下具体哪里出了问题?您有一个按钮和文本框,当按下按钮时,文本框应该获得焦点,然后呢? - Sinatr
我找到了问题所在。因为我在btnEnter上使用了PreviewKeyDown而不是KeyDown。 - justinfly
2个回答

3
我已经尝试了你的代码,可以完美模拟Enter键。在你的textbox中,你并没有说明希望Enter键执行什么操作,所以我猜测你想要换行 - 因为这是使用textbox输入时最常见的原因之一。
为了达到这个目的,在Xaml中需要设置AcceptsReturn="True",这允许textbox接受Enter键。 <TextBox x:Name="tbProdCode" AcceptsReturn="True" /> 如果这个功能不是你想要的,那么你可能没有将事件与Enter键连接起来执行相应的操作。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Jamie P

1

另一种方法是使用Xaml将按键绑定到命令:

<TextBox>
    <TextBox.InputBindings>
        <KeyBinding Key="Enter" Command="{Binding DoSomething}"/>
    </TextBox.InputBindings>
</TextBox>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接