Re[3]: [WPF] Не работают шорктаты в самодельных RoutedUIComm
От: Codechanger Россия  
Дата: 26.02.10 09:21
Оценка:
Здравствуйте, belnetmon, Вы писали:

B>>Код в студию


B>Может, конечно, и наглючено чего. С WPFом только месяц разбираюсь, так что сильно не бейте.


B>
B>//здесь динамически создается очередной пункт меню
B>item = new MenuItem();
B>//порождаем под него команду
B>RoutedUICommand ruc = GenerateRoutedUICommand("MenuItem1", "Caption", "Ctrl+R");
B>//создаем биндинг команды, навешивая на нее внешние какие-то специфичные обработчики либо
B>BindUICommand(ruc, MenuHandle_execute, MenuHandle_AlwaysCan);
B>//подключаем команду к пункту меню
B>item.Command=ruc;


B>//метод создаетк и возвращает команду с заданными текстом и шорткатом
B>public static RoutedUICommand GenerateRoutedUICommand(string name, string text, string shortcut) {
B>  InputGestureCollection igc = new InputGestureCollection();
B>  KeyGesture kg = null;
B>  //создаем шорткат из текста
B>  KeyGestureConverter kgk = new KeyGestureConverter();
B>  try {
B>    kg=(KeyGesture)kgk.ConvertFromString(shortcut);
B>  } catch {
B>  }
B>  //если задан, то задаем шорткат в коллекцию шорткатов 
B>  if (kg!=null)
B>    igc.Add(kg);
B>  //если будущая комнада с шорткатами или без, то разные конструкторы
B>  if (igc.Count==0)
B>    return new RoutedUICommand(text, name, mOwner.GetType());
B>  else
B>    return new RoutedUICommand(text, name, mOwner.GetType(), igc);
B>}


B>//метод делает привязку новой команды к обработчикам
B>void BindUICommand(RoutedUICommand ruc, ExecutedRoutedEventHandler exec_handle, CanExecuteRoutedEventHandler can_handle) {
B>  CommandBinding binding = new CommandBinding(ruc);
B>  if (exec_handle!=null)
B>    binding.Executed+=exec_handle;
B>  if (can_handle!=null)
B>    binding.CanExecute+=can_handle;
B>  mOwner.CommandBindings.Add(binding);
B>}
B>


Мда. Зря я код попросил, видимо.Вы как бы в команд биндинги команду добавили, а вот шорткаты на команду для контрола в инпут биндинги — нет. По коду могу сказать только то, что из него ничего непонятно, кроме того, что я описал выше. Подобного рода задачи решаются стандартными средствами WPF:

           CommandBindings.Add(new CommandBinding(CommonDialog.OkCommand, ExecuteOkCommand));///Тут добавляем комманд биндинг на команду
           InputBindings.Add(new KeyBinding(CommonDialog.OkCommand, Key.Enter, ModifierKeys.None));//Тут добавляем еще и шорткат команде

Все это вызывается для того контрола, к которому хотим обработчики команд привязать.
А в целом по коду — советую перечитать Commanding in WPF
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.