【问题标题】:Simulating the Enter key in WPF模拟 WPF 中的 Enter 键
【发布时间】:2016-02-25 18:06:07
【问题描述】:

我正在尝试在按钮事件中模拟按键。我可以使用下面的代码来模拟一些键,例如 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(() => { ... });中设置焦点后尝试放入部分。如果不是这种情况,那么您能否解释一下到底是什么不起作用?你有按钮和文本框,当按下按钮时,文本框应该获得焦点和...?
  • 我发现了问题。因为我为 btnEnter 使用 PreviewKeyDown 而不是 KeyDown。

标签: c# wpf keypress enter


【解决方案1】:

解决此问题的另一种方法是使用 Xaml 将按键绑定到命令:

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

【讨论】:

    【解决方案2】:

    我试过你的代码,可以完美模拟Enter

    你还没有在你的textbox 中说明你希望 Enter 做什么,所以我要在这里冒险并假设你想进入下一行 -因为这是在textbox 中使用Enter 的最常见原因之一

    为此,您需要在Xaml 中设置AcceptsReturn="True" - 这允许textbox 接受Enter 键。

    &lt;TextBox x:Name="tbProdCode" AcceptsReturn="True" /&gt;

    如果该功能不是您想要的,那么当 Enter 被点击时,您可能没有连接事件来执行某些操作。

    【讨论】:

    • 我是否建议也将您的KeyEventArgs ke = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, key) { RoutedEvent = UIElement.KeyDownEvent }; InputManager.Current.ProccessInput(ke) 放入它自己的函数中,您可以在其中传递一个键。即SendKey(Key key).
    猜你喜欢
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    相关资源
    最近更新 更多