protected override void OnPreviewKeyDown(KeyEventArgs e) { base.OnPreviewKeyDown(e); DataGridCell senderCell = e.OriginalSource as DataGridCell; bool ctrlDown = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl); if (e.Key == Key.Return) { if (senderCell != null && !senderCell.IsEditing) { // Enter edit mode if current cell is not in edit mode senderCell.Focus(); this.BeginEdit(); e.Handled = true; } } else if (e.Key == Key.Space) { if (senderCell != null && !senderCell.IsEditing) { object item = senderCell.DataContext; // In some cases senderCell is not selected. This can happen after multi selection over all items. if (!senderCell.IsSelected) { item = SelectedItem; // simply use first selected item } ToggleEnabledForItem(item); e.Handled = true; } } else if (ctrlDown && e.Key == Key.Up) { if (MoveUpCommand != null && MoveUpCommand.CanExecute(null)) { var focusedCellItem = (Keyboard.FocusedElement as DataGridCell)?.DataContext; MoveUpCommand.Execute(null); // DataGrid loses keyboard focus after moving items FocusCellAfterDelay(focusedCellItem); } e.Handled = true; } else if (ctrlDown && e.Key == Key.Down) { if (MoveDownCommand != null && MoveDownCommand.CanExecute(null)) { var focusedCellItem = (Keyboard.FocusedElement as DataGridCell)?.DataContext; MoveDownCommand.Execute(null); // DataGrid loses keyboard focus after moving items FocusCellAfterDelay(focusedCellItem); } e.Handled = true; } }
/// <summary> /// Updates operation collection. /// </summary> private void UpdateOperations() { this.contextMenuOperations = new Collection <MenuItemViewModel>(); if (this.SelectedItems.Count == 1) { SerializedDomainClassViewModel classViewModel = this.SelectedItems[0] as SerializedDomainClassViewModel; if (classViewModel != null) { if (classViewModel.Parent != null) { MenuItemViewModel mv = new MenuItemViewModel(this.ViewModelStore, "Select Relationship"); mv.Command = SelectRelationshipCommand; this.contextMenuOperations.Add(mv); } } SerializedReferenceRelationshipViewModel refRelViewModel = this.SelectedItems[0] as SerializedReferenceRelationshipViewModel; if (refRelViewModel != null) { if (!refRelViewModel.IsInFullSerialization) { MenuItemViewModel mv = new MenuItemViewModel(this.ViewModelStore, "Select Relationship"); mv.Command = SelectRelationshipCommand; this.contextMenuOperations.Add(mv); } } } if (this.SelectedItems.Count > 0) { AddSeparator(); MenuItemViewModel mvMoveUp = new MenuItemViewModel(this.ViewModelStore, "Move up", "pack://application:,,,/Tum.PDE.LanguageDSL.Visualization;component/Resources/Images/Up-16.png"); mvMoveUp.Command = MoveUpCommand; if (!MoveUpCommand.CanExecute()) { mvMoveUp.IsEnabled = false; } this.contextMenuOperations.Add(mvMoveUp); MenuItemViewModel mvMoveDown = new MenuItemViewModel(this.ViewModelStore, "Move down", "pack://application:,,,/Tum.PDE.LanguageDSL.Visualization;component/Resources/Images/Down-16.png"); mvMoveDown.Command = MoveDownCommand; if (!MoveDownCommand.CanExecute()) { mvMoveDown.IsEnabled = false; } this.contextMenuOperations.Add(mvMoveDown); } OnPropertyChanged("Operations"); }