B>Код в студию
Может, конечно, и наглючено чего. С WPFом только месяц разбираюсь, так что сильно не бейте.
//здесь динамически создается очередной пункт меню
item = new MenuItem();
//порождаем под него команду
RoutedUICommand ruc = GenerateRoutedUICommand("MenuItem1", "Caption", "Ctrl+R");
//создаем биндинг команды, навешивая на нее внешние какие-то специфичные обработчики либо
BindUICommand(ruc, MenuHandle_execute, MenuHandle_AlwaysCan);
//подключаем команду к пункту меню
item.Command=ruc;
//метод создаетк и возвращает команду с заданными текстом и шорткатом
public static RoutedUICommand GenerateRoutedUICommand(string name, string text, string shortcut) {
InputGestureCollection igc = new InputGestureCollection();
KeyGesture kg = null;
//создаем шорткат из текста
KeyGestureConverter kgk = new KeyGestureConverter();
try {
kg=(KeyGesture)kgk.ConvertFromString(shortcut);
} catch {
}
//если задан, то задаем шорткат в коллекцию шорткатов
if (kg!=null)
igc.Add(kg);
//если будущая комнада с шорткатами или без, то разные конструкторы
if (igc.Count==0)
return new RoutedUICommand(text, name, mOwner.GetType());
else
return new RoutedUICommand(text, name, mOwner.GetType(), igc);
}
//метод делает привязку новой команды к обработчикам
void BindUICommand(RoutedUICommand ruc, ExecutedRoutedEventHandler exec_handle, CanExecuteRoutedEventHandler can_handle) {
CommandBinding binding = new CommandBinding(ruc);
if (exec_handle!=null)
binding.Executed+=exec_handle;
if (can_handle!=null)
binding.CanExecute+=can_handle;
mOwner.CommandBindings.Add(binding);
}