1

我对命令绑定如何知道应用程序命令在哪里感到困惑。它不是包含命令绑定的控件的属性,所以 xaml 解析器是否只是查找层次结构直到找到它?

如果是这种情况,那么如果我将所有命令放在我的应用程序类中,它们也会被自动找到吗?最终这就是我所希望的。我只想知道在哪里制作我的命令,以便可以从 xaml 轻松访问它们

  <UserControl.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Properties"
                    Executed="EditPreferencesExecuted"
                    CanExecute="CanAlwaysExecute"/>
   </UserControl.CommandBindings>
4

1 回答 1

1

它是内置的。当您设计自己的命令时,您必须在控件的声明标记中包含命名空间,然后使用您选择的命名空间标记引用命名空间和命令。

这是我的一个使用 Helix 3D Toolkit 库的 UserControl 的示例。在控制声明中,我包括:

<dxr:DXRibbonWindow 
x:Class="Shell" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
[etc...]
xmlns:h="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf" 

使用在该命名空间中实现的命令只需像这样声明它们:

        <Button Content="Left View" 
         Command="{x:Static h:CameraController.LeftViewCommand}" />

然后库中的h:CameraController类定义一个静态 ICommand 属性来处理命令:

    public static RoutedCommand LeftViewCommand = new RoutedCommand();

在该类的构造函数中是以下代码:

        this.CommandBindings.Add(new CommandBinding(LeftViewCommand, this.LeftViewHandler));

...它为 XAML 系统提供了一个基于实例的绑定来使用。在您的 CommandBindings XAML 片段中,它看起来像这样:

<UserControl.CommandBindings>
    <CommandBinding Command="h:CameraController.LeftViewCommand"
                    Executed="SomeExecuteMethodInCodeBehind"
                    CanExecute="SomeExecuteTestInCodeBehind"/>
   </UserControl.CommandBindings>

因此,要概括地回答您的问题,您必须将命令放在命名空间中,在 XAML 标记中引用命名空间,并在代码或 XAML 声明中提供绑定。

于 2013-09-14T02:42:04.420 回答