调用命令时“输入””在XAML中按下了键
我想在
TextBox
中按下ENTER时调用一个命令。考虑以下XAML:
<UserControl
...
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
...>
...
<TextBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyUp">
<i:InvokeCommandAction Command="{Binding MyCommand}"
CommandParameter="{Binding Text}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
...
</UserControl>
并且MyCommand如下:
public ICommand MyCommand {
get { return new DelegateCommand<string>(MyCommandExecute); }
}
private void MyCommandExecute(string s) { ... }
使用上面的命令,我会在每次按键时调用我的命令。如何将命令限制为仅在按下ENTER键时调用?
我理解使用Expression Blend我可以使用条件,但这些似乎仅限于元素,不能考虑事件参数。
我也遇到过SLEX,它提供了自己的InvokeCommandAction
实现,它建立在Systems.Windows.Interactivity
实现之上,可以做我需要的。另一个考虑是编写我自己的触发器,但我希望有一种方法可以在不使用外部工具包的情况下完成。
没有找到相关结果
已邀请:
5 个回复
部窖空
和
组件可在官方Nuget包中用于WPF。
仿普
。对后一种方法的警告是,您失去了事件中多次调用的功能,但您可以更普遍地应用它。 自定义触发器方法 ExecuteCommandAction.cs
TextBoxEnterKeyTrigger.cs
MyUserControl.xaml
附属物方法 EnterKeyDown.cs
MyUserControl.xaml
诉嘎归亮
下一步是创建触发器。您可以使用基类做一些有趣的事情,使其更加通用,以捕获不同类型的按键,但我们会保持简单。
请记住,即使您的TextBox值可能存在数据绑定,也不会触发属性更改事件,因为您的文本框没有丢失焦点。出于这个原因,我将TextBox.Text属性的值传递给命令。最后一步是在XAML中使用此功能。您需要确保包含Interactivity命名空间以及包含上述代码的命名空间。
镰茧钩
搂腹时