2015-12-25 2 views
0

Я хочу, чтобы пользовательские настройки Command s отвечали в моем приложении. Так что я следовал инструкциям на this answer, и создал статический класс для моих команд:Тип ссылки не может найти тип named Команды

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 истина , CreateThing в настоящее время ничего не делает.

Я получаю эту ошибку на использовании MyControl в окне XAML:

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' 

UPDATE

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

Попробуйте 'Command =" {x: static local: Commands.Create} "' в привязке. –

+0

@Mathew См. Редактирование. – Kroltan

+0

Дважды проверьте, что команда CanExecute команды DeleteItem фактически указывает на метод CanCreateThing. –

ответ

0

С Mathew «s помощь, исправление было найдено:

Во-первых, я должен был заменить все экземпляры local:Commands.Create с {x:Static local:Commands.Create}. Однако пункты меню будут по-прежнему серыми.

Таким образом, в каждом пункте меню, я добавил CommandTarget ссылки на предка ContextMenu:

<MenuItem Command="{x:Static local:Commands.CreateTrigger}" 
        CommandTarget="{Binding PlacementTarget, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}"/> 

И сделал пункты меню кликабельны.