如何将 KeyEventArgs 参数传递给命令
How to pass KeyEventArgs parameters to the command
这是我的代码:
XAML:
<intr:Interaction.Triggers>
<intr:EventTrigger EventName="KeyDown">
<intr:InvokeCommandAction Command="{Binding KeyDownEvent}" />
</intr:EventTrigger>
</intr:Interaction.Triggers>
代码:
public DelegateCommand<KeyEventArgs> KeyDownEvent { get; private set; }
public MainWindowViewModel()
{
KeyDownEvent = new DelegateCommand<KeyEventArgs>(KeyDownEventHandler);
}
private void KeyDownEventHandler(KeyEventArgs args) //args is always null
{
try
{
if (args.Key == Key.System && args.SystemKey == Key.F4)
{
args.Handled = true;
}
}
catch (Exception ex)
{
}
}
当按下任意键时触发事件并调用 KeyDownEventHandler
,但 args
参数始终为 null
.
您必须将 PassEventArgsToCommand
属性 设置为 True
。
<intr:InvokeCommandAction Command="{Binding KeyDownEvent}"
PassEventArgsToCommand="True"/>
请注意,这是 Microsoft XAML behaviors NuGet package 中的 InvokeCommandAction
。这是对旧版 Blend 行为 (System.Windows.Interactivity
) 的替代。安装包后要使用的新 XML 命名空间是 http://schemas.microsoft.com/xaml/behaviors
。您可以使用 EventArgsParameterPath
.
在命令参数中指定 属性 路径
或者,如果您没有明确设置 CommandParameter
,Prism 随附的 InvokeCommandAction
也会传递事件参数。它还允许在带有 TriggerParameterPath
的命令参数中指定 属性。有关详细信息,请参阅 documentation.
[...] the Prism InvokeCommandAction
uses the EventArgs parameter passed to it from the parent trigger, passing it to the associated command if the CommandParameter is not set.
InvokeCommandAction
的旧变体不提供将事件参数传递给命令的选项。
这是我的代码:
XAML:
<intr:Interaction.Triggers>
<intr:EventTrigger EventName="KeyDown">
<intr:InvokeCommandAction Command="{Binding KeyDownEvent}" />
</intr:EventTrigger>
</intr:Interaction.Triggers>
代码:
public DelegateCommand<KeyEventArgs> KeyDownEvent { get; private set; }
public MainWindowViewModel()
{
KeyDownEvent = new DelegateCommand<KeyEventArgs>(KeyDownEventHandler);
}
private void KeyDownEventHandler(KeyEventArgs args) //args is always null
{
try
{
if (args.Key == Key.System && args.SystemKey == Key.F4)
{
args.Handled = true;
}
}
catch (Exception ex)
{
}
}
当按下任意键时触发事件并调用 KeyDownEventHandler
,但 args
参数始终为 null
.
您必须将 PassEventArgsToCommand
属性 设置为 True
。
<intr:InvokeCommandAction Command="{Binding KeyDownEvent}"
PassEventArgsToCommand="True"/>
请注意,这是 Microsoft XAML behaviors NuGet package 中的 InvokeCommandAction
。这是对旧版 Blend 行为 (System.Windows.Interactivity
) 的替代。安装包后要使用的新 XML 命名空间是 http://schemas.microsoft.com/xaml/behaviors
。您可以使用 EventArgsParameterPath
.
或者,如果您没有明确设置 CommandParameter
,Prism 随附的 InvokeCommandAction
也会传递事件参数。它还允许在带有 TriggerParameterPath
的命令参数中指定 属性。有关详细信息,请参阅 documentation.
[...] the Prism
InvokeCommandAction
uses the EventArgs parameter passed to it from the parent trigger, passing it to the associated command if the CommandParameter is not set.
InvokeCommandAction
的旧变体不提供将事件参数传递给命令的选项。