Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WPF中的应用程序级快捷键_.net_Wpf_Windows_Keyboard Shortcuts_Commandbinding - Fatal编程技术网

.net WPF中的应用程序级快捷键

.net WPF中的应用程序级快捷键,.net,wpf,windows,keyboard-shortcuts,commandbinding,.net,Wpf,Windows,Keyboard Shortcuts,Commandbinding,在WPF应用程序中,我目前正在尝试绑定一个命令,以便使用快捷键从应用程序中的任何位置启动计算器工具。我创建了一个命令,但没有了解如何映射命令和快捷键,以便在应用程序中创建通用快捷键。 提前感谢。您可以在xaml中执行此操作-请参阅该类文档中的示例: 更新:如果您使用的是MVVM,看起来您实际上无法仅使用xaml将KeyBinding绑定到ViewModel:请参见此处。在WPF中,为了使用快捷方式,您需要聚焦相应的控制器。但是,使用InputManager,您可以捕获应用程序的各种输入。在这

在WPF应用程序中,我目前正在尝试绑定一个命令,以便使用快捷键从应用程序中的任何位置启动计算器工具。我创建了一个命令,但没有了解如何映射命令和快捷键,以便在应用程序中创建通用快捷键。
提前感谢。

您可以在xaml中执行此操作-请参阅该类文档中的示例:



更新:如果您使用的是MVVM,看起来您实际上无法仅使用xaml将KeyBinding绑定到ViewModel:请参见此处。

在WPF中,为了使用快捷方式,您需要聚焦相应的控制器。但是,使用InputManager,您可以捕获应用程序的各种输入。在这里,您不需要关注各自的控制器

首先,你必须成为事件的主角

InputManager.Current.PreProcessInput -= Current_PreProcessInput;
InputManager.Current.PreProcessInput += Current_PreProcessInput;
那么

这样你就可以过滤掉所有不需要的东西,并获得所需的输入。因为这是一个快捷方式捕获应用程序,所以我只接受了KeyDown和keydup事件

您还可以获取所按下键的所有详细信息

keyEvent.Key.ToString()

你是说XAML而不是MXML?我认为MXML是为Flex设计的。哦,是的,我喜欢!我脑子里的技术太多了!修好了,谢谢。
private void Current_PreProcessInput(object sender, PreProcessInputEventArgs args)
    {
        try
        {
            if (args != null && args.StagingItem != null && args.StagingItem.Input != null)
            {
                InputEventArgs inputEvent = args.StagingItem.Input;

                if (inputEvent is KeyboardEventArgs)
                {
                    KeyboardEventArgs k = inputEvent as KeyboardEventArgs;
                    RoutedEvent r = k.RoutedEvent;
                    KeyEventArgs keyEvent = k as KeyEventArgs;

                    if (r == Keyboard.KeyDownEvent)
                    {
                    }

                    if (r == Keyboard.KeyUpEvent)
                    {
                    }
                }
            }
        }
        catch (Exception ex)
        {

        }
    }
keyEvent.Key.ToString()