private void LayoutEditor_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl) { m_IsCtrlDown = true; } if (m_IsSelected) { if (e.Key == Key.Up) { PushCommandToHistory(new MoveCommand(m_SelectedElement)); Canvas.SetTop(m_SelectedElement, Canvas.GetTop(m_SelectedElement) - 1); e.Handled = true; } else if (e.Key == Key.Down) { PushCommandToHistory(new MoveCommand(m_SelectedElement)); Canvas.SetTop(m_SelectedElement, Canvas.GetTop(m_SelectedElement) + 1); e.Handled = true; } else if (e.Key == Key.Left) { PushCommandToHistory(new MoveCommand(m_SelectedElement)); Canvas.SetLeft(m_SelectedElement, Canvas.GetLeft(m_SelectedElement) - 1); e.Handled = true; } else if (e.Key == Key.Right) { PushCommandToHistory(new MoveCommand(m_SelectedElement)); Canvas.SetLeft(m_SelectedElement, Canvas.GetLeft(m_SelectedElement) + 1); e.Handled = true; } else if (e.Key == Key.Delete) { if (MessageBox.Show("Delete slected item?", "", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { PushCommandToHistory(new RemoveCommand(this, m_SelectedElement)); RemoveCanvasElement(m_SelectedElement); e.Handled = true; } } else if (m_IsCtrlDown && e.Key == Key.C) { m_CopiedElement = m_SelectedElement; } } if (m_IsCtrlDown && e.Key == Key.V && m_CopiedElement != null) { PasteNewUIElement(m_CopiedElement); } if (m_IsCtrlDown && e.Key == Key.Z /*&& m_SelectedElement != null*/ && ActionHistory.HasUndo) { var command = ActionHistory.Pop(); command.Undo(); if (command is RemoveCommand) { m_SelectedElement = ((RemoveCommand)command).UIElement; } } if (m_IsCtrlDown && e.Key == Key.Y /*&& m_SelectedElement != null*/ && ActionHistory.HasRedo) { //MessageBox.Show("Not implemented!", "Notice", MessageBoxButton.OK, MessageBoxImage.Asterisk); var command = ActionHistory.Redo(); command.Undo(); if (command is RemoveCommand) { m_SelectedElement = ((RemoveCommand)command).UIElement; } } }