public ICommand OnUserNameKeyDown { get; set; }/// /// 绑定事件///
您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> .NET >> |ZYCWPF| InteractionTriggers中的EventTrigger中的KeyDown如何将KeyEventArgs进行传参,谢谢

|ZYCWPF| InteractionTriggers中的EventTrigger中的KeyDown如何将KeyEventArgs进行传参,谢谢

来源:网络整理     时间:2016/6/24 23:56:25     关键词:

关于网友提出的“ |ZYCWPF| InteractionTriggers中的EventTrigger中的KeyDown如何将KeyEventArgs进行传参,谢谢”问题疑问,本网通过在网上对“ |ZYCWPF| InteractionTriggers中的EventTrigger中的KeyDown如何将KeyEventArgs进行传参,谢谢”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: |ZYCWPF| InteractionTriggers中的EventTrigger中的KeyDown如何将KeyEventArgs进行传参,谢谢
描述:

如我有<>



       public ICommand OnUserNameKeyDown { get; set; }
       ///         /// 绑定事件         /// 
        void BindEvent()         {             this.OnUserNameKeyDown = new DelegateCommand(UserNameKeyDown);         }         void UserNameKeyDown(KeyEventArgs e)         {             if (e.Key == Key.Enter)
            {                 Login(null);             }         }
在XAML中如何绑定这个KeyDown的Event参数
谢谢
解决方案1:

ls 回答的很好,学习了。 另,MvvmLight 已经用 PassEventArgsToCommand 封装了。

  
 xmlns:gmc="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
 ...
    
      
    
  
解决方案2:

据我所知InvokeCommandAction无法传这个事件参数。 你可以直接用CallMethodAction:


     public void UserNameKeyDown(object sender, KeyEventArgs e)<> {
if (e.Key == Key.Enter) { Login(null); } }
当然模仿InvokeCommandAction自己写一个可以传参的action也很容易:

	public class InvokeEventCommand : TriggerAction
	{
		public static readonly DependencyProperty CommandProperty = 
/> DependencyProperty.Register("Command", typeof(ICommand), typeof(InvokeEventCommand)); public ICommand Command
/> { get { return (ICommand)GetValue(CommandProperty); } set { SetValue(CommandProperty, value); }
} protected override void Invoke(object parameter) { if (Command != null && Command.CanExecute(parameter)) Command.Execute(parameter);
} }
前台调用:

    
	public class CommandAction
	{
public static DependencyProperty KeyDownProperty = DependencyProperty.RegisterAttached("KeyDown", typeof(ICommand), typeof(CommandAction), new UIPropertyMetadata(KeyDownCommandChanged)); public static void SetKeyDown(UIElement target, bool value) { target.SetValue(KeyDownProperty, value); } private static void KeyDownCommandChanged(DependencyObject target, DependencyPropertyChangedEventArgs e) { var textbox = target as TextBox; if (textbox == null) throw new InvalidOperationException("This behavior can be attached to TextBox only."); if (e.NewValue != null && e.OldValue == null)
textbox.KeyDown +=TextboxKeyDown; else if (e.NewValue == null && e.OldValue != null)
textbox.KeyDown -= TextboxKeyDown;
} static void TextboxKeyDown(object sender, KeyEventArgs e)
/> {
var textbox = (TextBox) sender;  var command = (ICommand)textbox.GetValue(KeyDownProperty); command.Execute(e); } }
前台:
    

以上介绍了“ |ZYCWPF| InteractionTriggers中的EventTrigger中的KeyDown如何将KeyEventArgs进行传参,谢谢”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2046249.html

相关图片

相关文章