Пользовательская команда не работает

В моем XAML у меня есть это:

<usercontrol.commandbindings>
 </usercontrol.commandbindings>

Это прекрасно работает. Поэтому, когда я нажимаю контекстное меню, вызывается HelpExecuted().

Теперь я хочу сделать то же самое, кроме использования пользовательской команды вместо команды справки. Итак, что я делаю:

public RoutedCommand MyCustomCommand = new RoutedCommand();

и измените мой XAML на:

<usercontrol.commandbindings>
 </usercontrol.commandbindings>

Но я получаю ошибку: невозможно преобразовать строку "MyCustomCommand" в атрибут "Command" к объекту типа "System.Windows.Input.ICommand". CommandConverter не может конвертировать из System.String.

Что мне здесь не хватает? И обратите внимание, что я хочу сделать все это в XAML, т.е. Не хочу использовать CommandBindings.Add(новый CommandBinding (MyCustomCommand....

1 ответ

К сожалению, было немного быстро, чтобы опубликовать мой оригинальный ответ. Теперь я вижу, что проблема связана не с типом, а с CommandBinding. Для разрешения имени команды вам необходимо использовать расширение разметки. Обычно я делаю свои команды статичными в своем объявлении следующим образом:

namespace MyApp.Commands
{
 public class MyApplicationCommands
 {
 public static RoutedUICommand MyCustomCommand 
 = new RoutedUICommand("My custom command", 
 "MyCustomCommand", 
 typeof(MyApplicationCommands));
 }
}

И в XAML:

<usercontrol x:class="..." ...="" xmlns:commands="clr-namespace:MyApp.Commands">
...
<usercontrol.commandbindings>
 </usercontrol.commandbindings>
</usercontrol>

Вам нужно ввести пространство имен содержащего класса с помощью xmlns. Я назвал это "командами" в моем примере выше.

Оригинальное сообщение ниже:

Попробуйте изменить тип команды на RoutedUICommand. Конструктор немного отличается:

public RoutedUICommand MyCustomCommand 
 = new RoutedUICommand("Description", "Name", typeof(ContainingClass));

licensed under cc by-sa 3.0 with attribution.