2012-06-04 76 views
0

我希望能够允许用户在运行时更改热键。如何实现wpf键绑定

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

我想我必须做一个RoutedCommand的键绑定。假设我想用热键在UI上按下一个按钮。

eg ...让用户推F5点击应用程序上的btnGo。

回答

0

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

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

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

要创建自己的命令,你可以在代码中创建一个“RoutedUICommand”,并设置默认成员(默认名称,默认热键绑定等)。你很可能想把它变成一个类的静态属性。

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

+0

原来我能够在xaml中保留命令绑定,只是定义一个keygesture并使用inputbinding来添加它。所以......它的工作原理......人们通常会为点击代码中的内容做些什么,比如灰色按钮。所有这些代码是否从点击代码中退出,而不是从代码隐藏中完成? – user1435769

+0

对于支持命令的控件,它们将根据命令绑定的“CanExecute”属性自动禁用。 CanExecute是一个你写的函数,应该将e.CanExecute属性设置为true,如果你的函数可以在那时执行,否则返回false。 –

+0

我给出的代码有一个CanExecute函数。问题在于还有其他的东西,比如生成的文件名在click事件中完成,稍后由该命令调用的代码使用。有没有办法在热键命令被触发时调用点击事件,或者这是一种不可能或不好的做事方式? – user1435769