类型引用找不到名为Commands的类型

时间:2015-12-25 17:54:23

标签: c# wpf xaml command

我希望在我的应用程序中有自定义Command来响应。 所以我按照this answer上的说明操作,并为我的命令创建了一个静态类:

namespace MyNamespace {
    public static class Commands {
        public static readonly RoutedUICommand Create = new RoutedUICommand(
            "Create Thing", nameof(Create),
            typeof(MyControl)
        );
    }
}

然后我尝试在我的UserControl上使用它:

<UserControl x:Class="MyNamespace.MyControl"

             ...boilerplate...

             xmlns:local="clr-namespace:MyNamespace">
    <UserControl.CommandBindings>
        <CommandBinding Command="local:Commands.Create"
                        CanExecute="CanCreateThing"
                        Executed="CreateThing"/>
    </UserControl.CommandBindings>

    ...the control's contents...
</UserControl>

方法CanCreateThing始终将CanExecute设置为true。 CreateThing目前无效。

我在XAML窗口中使用MyControl时出现此错误:

Type reference cannot find type named '{clr-namespace:MyNamespace;assembly=MyAssembly}Commands'.

这个在绑定的Command="..."属性中。

Invalid value for property 'Command': 'Microsoft.VisualStudio.DesignTools.Xaml.LanguageService.Semantics.XmlValue'

更新

Mathew摆脱了错误,然而,带有这些命令的菜单项仍然显示为灰色。相关代码:

<TreeView ...>
    <ContextMenu>
        <MenuItem Command="{x:Static local:Commands.Create}"/>
    </ContextMenu>
    ...
</TreeView>

MyControl.xaml.cs

//...
private void CanCreateThing(object sender, CanExecuteRoutedEventArgs e) {
    e.CanExecute = true;
}
//...

1 个答案:

答案 0 :(得分:0)

Mathew的帮助下,找到了修复程序:

首先,我必须将local:Commands.Create的所有实例替换为{x:Static local:Commands.Create}。但是,菜单项仍然是灰色的。

因此,在每个菜单项中,我添加了引用祖先CommandTarget的{​​{1}}:

ContextMenu

这使得菜单项可以点击。