WPF:如何使用Command&输入绑定

时间:2013-12-27 04:48:03

标签: c# wpf

命令&输入绑定在WPF中似乎非常复杂 - 将特定命令绑定到某些输入似乎并不总是有效。我应该怎么做呢?

- 自我回答 -

我已经根据自己的发现更新了个人答案,考虑到我花了多长时间才找到信息,理解并实际实现这些令人费解的事情。

WPF中的绑定似乎是一个不友好的概念,特别是如果你没有经验。希望这会让人们的生活更轻松。

1 个答案:

答案 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中使用绑定。我希望这篇文章可以防止这个概念容易引起的所有困难。