这是我的代码:
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。
发布于 2021-02-17 15:58:23
您必须将PassEventArgsToCommand属性设置为True。
<intr:InvokeCommandAction Command="{Binding KeyDownEvent}"
PassEventArgsToCommand="True"/>请注意,这是来自InvokeCommandAction的Microsoft行为NuGet包。这是对遗留混合行为(System.Windows.Interactivity)的替代。安装包后要使用的新XML命名空间是http://schemas.microsoft.com/xaml/behaviors。可以使用EventArgsParameterPath在命令参数中指定属性路径。
或者,如果您没有显式设置InvokeCommandAction,棱镜附带的CommandParameter也会传递事件args。它还允许使用TriggerParameterPath在命令参数中指定属性。有关更多信息,请参阅文档。
..。Prism
InvokeCommandAction使用从父触发器传递给它的EventArgs参数,如果没有设置CommandParameter,则将其传递给相关联的命令。
InvokeCommandAction的旧版本没有提供将事件参数传递给命令的选项。
https://stackoverflow.com/questions/66245377
复制相似问题