我希望在我的应用程序中有自定义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;
}
//...
答案 0 :(得分:0)
在Mathew的帮助下,找到了修复程序:
首先,我必须将local:Commands.Create
的所有实例替换为{x:Static local:Commands.Create}
。但是,菜单项仍然是灰色的。
因此,在每个菜单项中,我添加了引用祖先CommandTarget
的{{1}}:
ContextMenu
这使得菜单项可以点击。