public static void RaiseMenuItemClickOnKeyGesture(this ItemsControl control, KeyEventArgs args, bool throwOnError) { if (args == null) throw new ArgumentNullException("e"); if (control == null) return; KeyGestureConverter kgc = new KeyGestureConverter(); foreach (var item in control.Items.OfType<MenuItem>()) { if (!string.IsNullOrWhiteSpace(item.InputGestureText)) { KeyGesture gesture = null; if (throwOnError) { gesture = kgc.ConvertFrom(item.InputGestureText) as KeyGesture; } else { try { gesture = kgc.ConvertFrom(item.InputGestureText) as KeyGesture; } catch { } } if (gesture != null && gesture.Matches(null, args)) { item.RaiseEvent(new RoutedEventArgs(MenuItem.ClickEvent)); args.Handled = true; return; } } RaiseMenuItemClickOnKeyGesture(item, args, throwOnError); if (args.Handled) return; } }
protected override ModifierKeys ConvertFrom(string value) { KeyGestureConverter c = new KeyGestureConverter(); return ((KeyGesture)c.ConvertFrom(value)).ModifierKeys; }
public void ConverterTest2() { KeyGesture keyGesture; KeyGestureConverter c = new KeyGestureConverter(); keyGesture = (KeyGesture)c.ConvertFrom(" CTRL + alt + wIN + a"); Assert.AreEqual(ModifierKeys.Control | ModifierKeys.Alt | ModifierKeys.Windows, keyGesture.ModifierKeys); Assert.AreEqual(Key.A, keyGesture.Key); keyGesture = (KeyGesture)c.ConvertFrom(" CTRL + wIN + f10 + alt"); Assert.AreEqual(ModifierKeys.Control | ModifierKeys.Alt | ModifierKeys.Windows, keyGesture.ModifierKeys); Assert.AreEqual(Key.F10, keyGesture.Key); keyGesture = (KeyGesture)c.ConvertFrom("Ctrl+Enter"); Assert.AreEqual(ModifierKeys.Control, keyGesture.ModifierKeys); Assert.AreEqual(Key.Enter, keyGesture.Key); Assert.AreEqual("Ctrl+A", c.ConvertTo(new KeyGesture(Key.A, ModifierKeys.Control), typeof(string))); AssertHelper.AssertThrows<NotSupportedException>(() => { c.ConvertFrom(" CTRL + wIN + f10 + alt + b"); }); AssertHelper.AssertThrows<NotSupportedException>(() => { c.ConvertTo(new KeyGesture(Key.A, ModifierKeys.Control), typeof(int)); }); }
private void CreateKeyBindings(ElementViewModel attachedViewModel) { control.InputBindings.Clear(); var converter = new KeyGestureConverter(); foreach (var command in attachedViewModel.Commands) { if (!string.IsNullOrEmpty(command.KeyGesture)) { control.InputBindings.Add( new InputBinding(command, (KeyGesture)converter.ConvertFrom(command.KeyGesture) ) ); } } }
void InitMainMenu() { KeyGestureConverter kgc = new KeyGestureConverter(); foreach (var topLevelMenu in mainMenuCommands.OrderBy(c => c.Metadata.MenuOrder).GroupBy(c => c.Metadata.Menu)) { var topLevelMenuItem = mainMenu.Items.OfType<MenuItem>().FirstOrDefault(m => (m.Header as string) == topLevelMenu.Key); foreach (var category in topLevelMenu.GroupBy(c => c.Metadata.MenuCategory)) { if (topLevelMenuItem == null) { topLevelMenuItem = new MenuItem(); topLevelMenuItem.Header = topLevelMenu.Key; mainMenu.Items.Add(topLevelMenuItem); } else if (topLevelMenuItem.Items.Count > 0) { topLevelMenuItem.Items.Add(new Separator()); } foreach (var entry in category) { MenuItem menuItem = new MenuItem(); menuItem.Command = CommandWrapper.Unwrap(entry.Value); if (!string.IsNullOrEmpty(entry.Metadata.Header)) menuItem.Header = entry.Metadata.Header; if (!string.IsNullOrEmpty(entry.Metadata.MenuIcon)) { menuItem.Icon = new Image { Width = 16, Height = 16, Source = Images.LoadImage(entry.Value, entry.Metadata.MenuIcon) }; } menuItem.IsEnabled = entry.Metadata.IsEnabled; menuItem.InputGestureText = entry.Metadata.InputGestureText; if (!string.IsNullOrWhiteSpace(menuItem.InputGestureText)) { this.InputBindings.Add(new InputBinding(menuItem.Command, kgc.ConvertFrom(menuItem.InputGestureText) as InputGesture)); } topLevelMenuItem.Items.Add(menuItem); } } } }