命令&输入绑定在WPF中似乎非常复杂 - 将特定命令绑定到某些输入似乎并不总是有效。我应该怎么做呢?
- 自我回答 -
我已经根据自己的发现更新了个人答案,考虑到我花了多长时间才找到信息,理解并实际实现这些令人费解的事情。
WPF中的绑定似乎是一个不友好的概念,特别是如果你没有经验。希望这会让人们的生活更轻松。
答案 0 :(得分:20)
首先,在xaml文件的顶部添加应用程序命名空间,该文件将使用绑定:ex。
xmlns:main="clr-namespace:MyApplication"
接下来,添加自定义静态类以包含命令,在主窗口类之外:
public static class Command
{
public static RoutedCommand GSToggleCmd = new RoutedCommand();
public static RoutedCommand ScreenZoomCmd = new RoutedCommand();
}
我的主要窗口类恰好是'MainWindow';我在它下面定义了Command类。
最后,在xaml文件中添加命令绑定
<Window.CommandBindings>
<CommandBinding Command="main:Command.GSToggleCmd" Executed="GameStateToggleExecuted" />
<CommandBinding Command="main:Command.ScreenZoomCmd" Executed="ApplyScreenFitCmd" />
</Window.CommandBindings>
Command=""
指的是您要绑定的RoutedCommand
。我已命名我的命名空间引用main
,因此语法main:Command.nameofcommand
Executed=""
指的是触发命令时调用的函数。
Executed
功能的示例:
private void ApplyScreenFitCmd( object sender, ExecutedRoutedEventArgs args )
{
string proportionStr = args.Parameter as string;
}
就是这样。在CommandBindings
中使用WPF
的简约方法。
要添加命令,只需查看RoutedCommand
类中的新静态Command
,然后在CommandBinding
下的xaml文件中添加Window.CommandBindings
注意:强>
Visual Studio的Xaml编辑器可能会首先抱怨某些命令无法找到。构建项目将解决问题。
更多信息:
您还可以通过 InputBindings 触发CommandBindings
。 (关键触发器)
示例(放在将使用它们的Xaml文件中):
<Window.InputBindings>
<KeyBinding Key="F5" Command="main:Command.GSToggleCmd" />
<KeyBinding Modifiers="Shift+Alt" Key="Q" Command="main:Command.ScreenZoomCmd" CommandParameter="1.0" />
<KeyBinding Modifiers="Alt" Key="W" Command="main:Command.ScreenZoomCmd" CommandParameter="0.75" />
<KeyBinding Modifiers="Alt" Key="E" Command="main:Command.ScreenZoomCmd" CommandParameter="0.5" />
</Window.InputBindings>
所以它基本上是Key
按下触发器KeyBinding
,它会触发指定命令的CommandBinding
,触发相应的调用函数。
与上面的示例一样,您也可以定义CommandParameter
以将参数发送到最终调用的函数。关于这一点的好处在于,与上面一样,您可以通过在不同的CommandBinding
中使用来重复使用相同的CommandParameters
。
您还可以通过按钮,MenuItems等触发CommandBindings
示例:
<MenuItem Header="100%" InputGestureText="Alt+Q" Command="main:Command.ScreenZoomCmd" CommandParameter="1.0"/>
这与InputBindings
的语法相同。
我花了一些时间才采用简约,统一的方式在WPF中使用绑定。我希望这篇文章可以防止这个概念容易引起的所有困难。