WPF 文本框的命令,当我们按 Enter 键时触发

本文关键字:Enter 我们 文本 命令 WPF | 更新日期: 2023-09-27 18:03:55

将 WPF 应用程序中的Button绑定到VIEWMODEL类中的Command非常容易。我想为TextBox实现类似的绑定.

我有一个TextBox,我需要将其绑定到一个Command,当我在TextBox聚焦时按 Enter 时,该会触发。目前,我正在为KeyUp事件使用以下处理程序,但它看起来很丑......而且我不能把它放在我的VIEWMODEL课上。

private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == System.Windows.Input.Key.Enter)
    {
        // your event handler here
        e.Handled = true;
        MessageBox.Show("Enter Key is pressed!");
    }
}

有没有更好的方法可以做到这一点?

WPF 文本框的命令,当我们按 Enter 键时触发

我遇到了同样的问题并在这里找到了解决方案,这是代码示例:

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

Aryan,并非每个 WPF 对象都支持命令。因此,如果您不想这样做,则需要从代码隐藏(稍微耦合(调用视图模型,或者使用一些 MVVM 消息传递实现来解耦。有关示例,请参阅 MVVM 轻型消息传递工具包。或者像这样简单地使用触发器:

<TextBox>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="KeyUp">
            <i:InvokeDataCommand Command="{Binding MyCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>
我喜欢

Sarh 的答案,但它在我的程序中不起作用,除非我Enter更改为 Return

<TextBox>
    <TextBox.InputBindings>
        <KeyBinding Key="Return" Command="{}" />
   </TextBox.InputBindings>
</TextBox>
<TextBox Text="{Binding FieldThatIAmBindingToo, UpdateSourceTrigger=PropertyChanged}">
    <TextBox.InputBindings>
        <KeyBinding Command="{Binding AddCommand}" Key="Return" />
    </TextBox.InputBindings>
</TextBox>

我从这里得到了答案

可以将 true 设置为 AcceptReturn 属性。

 <TextBox AcceptsReturn="True" />