捕获TextBox中的Enter键

时间:2011-04-05 18:16:00

标签: wpf

在我的WPF视图中,我尝试将事件绑定到Enter键,如下所示:

<TextBox Width="240" VerticalAlignment="Center" Margin="2" Text="{Binding SearchCriteria, Mode=OneWayToSource}">
  <TextBox.InputBindings>
      <KeyBinding Key="Enter" Command="{Binding EnterKeyCommand}"/>
      <KeyBinding Key="Tab" Command="{Binding TabKeyCommand}"/>
  </TextBox.InputBindings>
</TextBox>

此代码有效,当用户按下Enter键时,我的EnterKeyCommand将触发。但问题是,当事件触发时,WPF尚未将文本框中的文本绑定到“SearchCriteria”。因此,当我的事件触发时,“SearchCriteria”的内容为空。我可以在此代码中进行简单的更改,以便在我的EnterKey命令触发时可以获取文本框的内容吗?

4 个答案:

答案 0 :(得分:67)

您需要将UpdateSourceTrigger绑定的TextBox.Text更改为PropertyChanged。请参阅here

答案 1 :(得分:10)

您可以将TextBox的InputBindings属性作为CommandParameter传递给Command

<TextBox x:Name="MyTextBox">
    <TextBox.InputBindings>
        <KeyBinding Key="Return" 
                    Command="{Binding MyCommand}"
                    CommandParameter="{Binding ElementName=MyTextBox, Path=Text}"/>
    </TextBox.InputBindings>
</TextBox>

答案 2 :(得分:7)

您也可以在后面的代码中执行此操作。

How to: Detect When the Enter Key Pressed

在检查输入/返回时,只需调用事件处理程序代码。

答案 3 :(得分:4)

我知道这已经有6年了,但是没有一个答案能够完整地使用XAML产生正确答案而且没有代码隐藏。我还有一些工作要做。作为参考,该方法如下。首先是XAML

 <TextBox Text="{Binding SearchText, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">
        <TextBox.InputBindings>
            <KeyBinding Key="Enter" Command="{Binding SearchEnterHit}"/>
            <KeyBinding Key="Return" Command="{Binding SearchEnterHit}"/>
        </TextBox.InputBindings>
    </TextBox>

基本上,方法是在每次击键时将每个键都放到绑定的 SearchText 上。因此,一旦按下return / enter,字符串将完全出现在SearchText中。因此,在 SearchEnterHit 命令中,TextBox中的整个字符串都可以通过SearchText属性获得。

如上所述,UpdateSourceTrigger = PropertyChanged是每次击键 SearchText 属性的内容。 KeyBindings捕获回车键。

这实际上是最简单的方法,没有代码隐藏和所有XAML。当然,您经常将密钥刷新到SearchText属性,但这通常不是问题。