关于网友提出的“ |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