Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
 protected override ModifierKeys ConvertFrom(string value) {
     KeyGestureConverter c = new KeyGestureConverter();
     return ((KeyGesture)c.ConvertFrom(value)).ModifierKeys;
 }
Ejemplo n.º 3
0
        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));
            });
        }
Ejemplo n.º 4
0
        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)
                            )
                        );
                }
            }
        }
Ejemplo n.º 5
0
		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);
					}
				}
			}
		}