首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将KeyEventArgs参数传递给命令

如何将KeyEventArgs参数传递给命令
EN

Stack Overflow用户
提问于 2021-02-17 15:49:11
回答 1查看 293关注 0票数 0

这是我的代码:

XAML:

代码语言:javascript
复制
<intr:Interaction.Triggers>
    <intr:EventTrigger EventName="KeyDown">
        <intr:InvokeCommandAction Command="{Binding KeyDownEvent}" />
    </intr:EventTrigger>
</intr:Interaction.Triggers>

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-17 15:58:23

您必须将PassEventArgsToCommand属性设置为True

代码语言:javascript
复制
<intr:InvokeCommandAction Command="{Binding KeyDownEvent}"
                          PassEventArgsToCommand="True"/>

请注意,这是来自InvokeCommandActionMicrosoft行为NuGet包。这是对遗留混合行为(System.Windows.Interactivity)的替代。安装包后要使用的新XML命名空间是http://schemas.microsoft.com/xaml/behaviors。可以使用EventArgsParameterPath在命令参数中指定属性路径。

或者,如果您没有显式设置InvokeCommandAction,棱镜附带的CommandParameter也会传递事件args。它还允许使用TriggerParameterPath在命令参数中指定属性。有关更多信息,请参阅文档

..。Prism InvokeCommandAction使用从父触发器传递给它的EventArgs参数,如果没有设置CommandParameter,则将其传递给相关联的命令。

InvokeCommandAction的旧版本没有提供将事件参数传递给命令的选项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66245377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档