вот общая схема, которую я использую ....
Во-первых, держите свои команды в своем собственном статическом классе, это способствует повторному использованию и т. Д ....
public static class MyCommands
{
public static RoutedUICommand CmdFoo = new RoutedUICommand("CmdFoo",
"CmdFoo",
typeof(MyCommands));
}
секунда, зарегистрируйте команду в control / window / etc. вы хотите использовать его, как правило, в конструкторе
public MyControl
{
public MyControl()
{
CommandBindings.Add(
new CommandBinding( MyCommands.CmdFoo, // this is the command object
XCutFooCommand, // execute
CanXCuteFooCommand));// can execute?
}
в-третьих, создайте ваши обработчики в элементе управления / окне / и т.д .....
public void CanExecuteRerollCommand(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true; // can this command be executed?
e.Handled = true; // has this event been handled?
}
public void ExecuteRerollCommand(object sender, ExecutedRoutedEventArgs e)
{
// do stuff
}
}
наконец, ваш xaml должен выглядеть так:
<ContextMenu>
<ContextMenu.CommandBindings>
<CommandBinding Command="foo:MyCommands.CmdFoo"
CanExecute="CanExecuteRerollCommand"
Executed="ExecuteRerollCommand" />
</ContextMenu.CommandBindings>
<MenuItem Header="Reroll" Command="foo:MyCommands.CmdFoo"/>
</ContextMenu>
обратите внимание, что привязка отсутствует. Также обратите внимание на <CommandBinding>
в <ContextMenu>
.
вот ссылка ....
http://www.wiredprairie.us/journal/2007/04/commandtarget_menuitem_context.html
отключаемая команда адресована на этот сайт