【问题标题】:How do I implement wpf keybinding如何实现 wpf 键绑定
【发布时间】:2012-06-04 18:25:23
【问题描述】:

我希望能够允许用户在运行时更改热键。

有没有人有一个具体的例子说明如何在代码隐藏 C# 中绑定一个键来完成这个?

我假设我必须使用 RoutedCommand 进行键绑定。假设我想用热键按下 UI 上的按钮。

eg...让用户按F5点击应用上的btnGo。

【问题讨论】:

    标签: wpf key-bindings routedevent


    【解决方案1】:

    命令的工作方式与您的想法有些不同。当您按下按钮时,它不会触发对应用程序中按钮的点击。相反,您定义了一个命令(在这种情况下,您可以有一个名为“Go”的命令),您可以将此命令分配给应用程序中的各种元素(菜单项、按钮等)。所有这些项都会触发命令并该命令具有执行代码的“已执行”功能。

    如果将 CommandBindings 添加到主窗口,则可以使用热键全局触发这些命令。您可以通过以下代码轻松地将命令绑定放置在 XAML 中:

    <Window.CommandBindings>
        <CommandBinding Command="local:MyCommands.Go" CanExecute="GoCanExecute" Executed="Go" />
    </Window.CommandBindings>
    

    要创建自己的命令,您可以在代码中创建“RoutedUICommand”并设置默认成员(默认名称、默认键绑定等)。您很可能希望将其设为类的静态属性。

    然后,如果您想更改或添加此命令的键绑定,您只需访问此静态属性并修改 InputGestures 集合。您可以清除它、添加新的键绑定并根据需要进行更改。

    【讨论】:

    • 原来我能够将命令绑定留在 xaml 中,只需定义一个键手势并使用 inputbinding 来添加它。所以......但是它可以工作......人们通常对点击代码中的内容做什么,例如使按钮变灰。所有这些代码都是从点击代码中提取出来的,而是从代码隐藏中完成的吗?
    • 对于支持命令的控件,它们将根据命令绑定的“CanExecute”属性自动禁用。 CanExecute 是您编写的函数,如果您的函数当时可以执行,则应将 e.CanExecute 属性设置为 true,否则为 false。
    • 给我的代码有一个 CanExecute 函数。问题是还有其他事情,例如在单击事件中完成的文件名的生成,稍后由命令调用的代码使用。有没有办法在触发热键命令时调用点击事件,或者这是一种不可能/或不好的做事方式?
    • 从热键按下调用点击事件是一种不好的做事方式。为什么 Button 不只使用 Command 绑定?一旦 Executed 事件处理程序被调用,它就不应该关心它是由热键还是按钮单击触发的。
    • 我也不喜欢这个主意....我不知道 onExecute。所以...我可以把我的点击代码放在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    相关资源
    最近更新 更多