WPF:如何使用命令和输入绑定

dk1*_*123 23 c# wpf

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

- 自己回答 -

我用自己的发现更新了个人答案,考虑到我花了多长时间才找到信息,理解并实际实现这些复杂的事情.

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

dk1*_*123 20

首先,在xaml文件的顶部添加应用程序命名空间,该文件将使用绑定:ex.

xmlns:main="clr-namespace:MyApplication"

接下来,在主窗口类之外添加一个自定义静态类来包含命令:ex.

public static class Command
{
    public static RoutedCommand GSToggleCmd = new RoutedCommand();
    public static RoutedCommand ScreenZoomCmd = new RoutedCommand();
}
Run Code Online (Sandbox Code Playgroud)

我的主要窗口类恰好是'MainWindow'; 我在它下面定义了Command类.

最后,在xaml文件中添加命令绑定

<Window.CommandBindings>
    <CommandBinding Command="main:Command.GSToggleCmd" Executed="GameStateToggleExecuted" />
    <CommandBinding Command="main:Command.ScreenZoomCmd" Executed="ApplyScreenFitCmd" />
</Window.CommandBindings>
Run Code Online (Sandbox Code Playgroud)

Command=""是指RoutedCommand你将要约束的.我已命名我的命名空间引用main,因此语法main:Command.nameofcommand

Executed="" 是指触发命令时调用的函数.

Executed功能示例:

private void ApplyScreenFitCmd( object sender, ExecutedRoutedEventArgs args )
{
    string proportionStr = args.Parameter as string;
}
Run Code Online (Sandbox Code Playgroud)

就是这样.简约,简单的方法来使用CommandBindingsWPF.

要添加一个命令,只是在夹头一个新的静态RoutedCommandCommand类,并添加CommandBinding下的XAML文件Window.CommandBindings

注意:

Visual Studio的Xaml编辑器可能会首先抱怨某些命令无法找到.构建项目将解决问题.

更多信息:

您也可以CommandBindings通过InputBindings触发.(关键触发器)

示例(放在将使用它们的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>
Run Code Online (Sandbox Code Playgroud)

所以它基本上是Key按下触发器KeyBinding,它又触发CommandBinding指定的命令,触发相应的调用函数.

与上面的示例一样,您还可以定义CommandParameter将参数发送到最终调用的函数.关于这一点的好处是,就像上面一样,你可以CommandBinding通过在不同的方式中重复使用它来重复使用它CommandParameters.

您还可以CommandBindings通过Buttons,MenuItems等触发.

例:

<MenuItem Header="100%" InputGestureText="Alt+Q" Command="main:Command.ScreenZoomCmd" CommandParameter="1.0"/>
Run Code Online (Sandbox Code Playgroud)

这与语法相同InputBindings.

我花了一些时间才采用简约,统一的方式在WPF中使用绑定.我希望这篇文章可以防止这个概念容易引起的所有斗争.

  • 这是非常有用的,它帮助我理解了这个概念 (2认同)