Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CommandBinding"/> class.
        /// </summary>
        /// <param name="command">The command that is being bound.</param>
        /// <param name="executed">The handler for the command's <see cref="Executed"/> event.</param>
        /// <param name="canExecute">The handler for the command's <see cref="CanExecute"/> event.</param>
        public CommandBinding(ICommand command, UpfExecutedRoutedEventHandler executed, UpfCanExecuteRoutedEventHandler canExecute)
        {
            Contract.Require(command, nameof(command));

            this.command = command;

            if (executed != null)
            {
                Executed += executed;
            }

            if (canExecute != null)
            {
                CanExecute += canExecute;
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="TextEditingControl"/> class.
        /// </summary>
        /// <param name="uv">The Ultraviolet context.</param>
        /// <param name="name">The element's identifying name within its namescope.</param>
        public TextEditingControl(UltravioletContext uv, String name)
            : base(uv, name)
        {
            var canExecuteIsEditable     = new UpfCanExecuteRoutedEventHandler(CanExecuteIsEditable);
            var canExecuteIsCaretVisible = new UpfCanExecuteRoutedEventHandler(CanExecuteIsCaretVisible);

            // Selection commands
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), ApplicationCommands.SelectAll,
                                                 ExecutedSelectAll, canExecuteIsCaretVisible, new KeyGesture(Key.A, ModifierKeys.Control, "Ctrl+A"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectRightByCharacter,
                                                 ExecutedSelectRightByCharacter, canExecuteIsCaretVisible, new KeyGesture(Key.Right, ModifierKeys.Shift, "Shift+Right"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectLeftByCharacter,
                                                 ExecutedSelectLeftByCharacter, canExecuteIsCaretVisible, new KeyGesture(Key.Left, ModifierKeys.Shift, "Shift+Left"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectRightByWord,
                                                 ExecutedSelectRightByWord, canExecuteIsCaretVisible, new KeyGesture(Key.Right, ModifierKeys.Control | ModifierKeys.Shift, "Ctrl+Shift+Right"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectLeftByWord,
                                                 ExecutedSelectLeftByWord, canExecuteIsCaretVisible, new KeyGesture(Key.Left, ModifierKeys.Control | ModifierKeys.Shift, "Ctrl+Shift+Left"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectDownByLine,
                                                 ExecutedSelectDownByLine, canExecuteIsCaretVisible, new KeyGesture(Key.Down, ModifierKeys.Shift, "Shift+Down"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectUpByLine,
                                                 ExecutedSelectUpByLine, canExecuteIsCaretVisible, new KeyGesture(Key.Up, ModifierKeys.Shift, "Shift+Up"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectDownByPage,
                                                 ExecutedSelectDownByPage, canExecuteIsCaretVisible, new KeyGesture(Key.PageDown, ModifierKeys.Shift, "Shift+PageDown"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectUpByPage,
                                                 ExecutedSelectUpByPage, canExecuteIsCaretVisible, new KeyGesture(Key.PageUp, ModifierKeys.Shift, "Shift+PageUp"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectToLineStart,
                                                 ExecutedSelectToLineStart, canExecuteIsCaretVisible, new KeyGesture(Key.Home, ModifierKeys.Shift, "Shift+Home"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectToLineEnd,
                                                 ExecutedSelectToLineEnd, canExecuteIsCaretVisible, new KeyGesture(Key.End, ModifierKeys.Shift, "Shift+End"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectToDocumentStart,
                                                 ExecutedSelectToDocumentStart, canExecuteIsCaretVisible, new KeyGesture(Key.Home, ModifierKeys.Control | ModifierKeys.Shift, "Ctrl+Shift+Home"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.SelectToDocumentEnd,
                                                 ExecutedSelectToDocumentEnd, canExecuteIsCaretVisible, new KeyGesture(Key.End, ModifierKeys.Control | ModifierKeys.Shift, "Ctrl+Shift+End"));

            // Movement commands
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveRightByCharacter,
                                                 ExecutedMoveRightByCharacter, canExecuteIsCaretVisible, new KeyGesture(Key.Right, ModifierKeys.None, "Right"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveLeftByCharacter,
                                                 ExecutedMoveLeftByCharacter, canExecuteIsCaretVisible, new KeyGesture(Key.Left, ModifierKeys.None, "Left"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveRightByWord,
                                                 ExecutedMoveRightByWord, canExecuteIsCaretVisible, new KeyGesture(Key.Right, ModifierKeys.Control, "Ctrl+Right"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveLeftByWord,
                                                 ExecutedMoveLeftByWord, canExecuteIsCaretVisible, new KeyGesture(Key.Left, ModifierKeys.Control, "Ctrl+Left"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveDownByLine,
                                                 ExecutedMoveDownByLine, canExecuteIsCaretVisible, new KeyGesture(Key.Down, ModifierKeys.None, "Down"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveUpByLine,
                                                 ExecutedMoveUpByLine, canExecuteIsCaretVisible, new KeyGesture(Key.Up, ModifierKeys.None, "Up"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveDownByPage,
                                                 ExecutedMoveDownByPage, canExecuteIsCaretVisible, new KeyGesture(Key.PageDown, ModifierKeys.None, "PageDown"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveUpByPage,
                                                 ExecutedMoveUpByPage, canExecuteIsCaretVisible, new KeyGesture(Key.PageUp, ModifierKeys.None, "PageUp"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveToLineStart,
                                                 ExecutedMoveToLineStart, canExecuteIsCaretVisible, new KeyGesture(Key.Home, ModifierKeys.None, "Home"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveToLineEnd,
                                                 ExecutedMoveToLineEnd, canExecuteIsCaretVisible, new KeyGesture(Key.End, ModifierKeys.None, "End"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveToDocumentStart,
                                                 ExecutedMoveToDocumentStart, canExecuteIsCaretVisible, new KeyGesture(Key.Home, ModifierKeys.Control, "Ctrl+Home"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.MoveToDocumentEnd,
                                                 ExecutedMoveToDocumentEnd, canExecuteIsCaretVisible, new KeyGesture(Key.End, ModifierKeys.Control, "Ctrl+End"));

            // Text editing commands
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.ToggleInsert,
                                                 ExecutedToggleInsert, canExecuteIsCaretVisible, new KeyGesture(Key.Insert, ModifierKeys.None, "Insert"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.Backspace,
                                                 ExecutedBackspace, canExecuteIsEditable, new KeyGesture(Key.Backspace, ModifierKeys.None, "Backspace"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.Delete,
                                                 ExecutedDelete, canExecuteIsEditable, new KeyGesture(Key.Delete, ModifierKeys.None, "Delete"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.DeleteNextWord,
                                                 ExecutedDeleteNextWord, canExecuteIsEditable, new KeyGesture(Key.Delete, ModifierKeys.Control, "Ctrl+Delete"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.DeletePreviousWord,
                                                 ExecutedDeletePreviousWord, canExecuteIsEditable, new KeyGesture(Key.Backspace, ModifierKeys.Control, "Ctrl+Backspace"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.EnterParagraphBreak,
                                                 ExecutedEnterParagraphBreak, CanExecuteEnterParagraphBreak, new KeyGesture(Key.Return, ModifierKeys.None, "Return"), new KeyGesture(Key.KeypadEnter, ModifierKeys.None, "KeypadEnter"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.EnterLineBreak,
                                                 ExecutedEnterLineBreak, CanExecuteEnterLineBreak, new KeyGesture(Key.Return, ModifierKeys.Shift, "Shift+Return"), new KeyGesture(Key.KeypadEnter, ModifierKeys.Shift, "Shift+KeypadEnter"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.TabForward,
                                                 ExecutedTabForward, CanExecuteTabForward, new KeyGesture(Key.Tab, ModifierKeys.None, "Tab"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), EditingCommands.TabBackward,
                                                 ExecutedTabBackward, CanExecuteTabBackward, new KeyGesture(Key.Tab, ModifierKeys.Shift, "Shift+Tab"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), ApplicationCommands.Copy,
                                                 ExecutedCopy, CanExecuteCopy, new KeyGesture(Key.C, ModifierKeys.Control, "Ctrl+C"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), ApplicationCommands.Cut,
                                                 ExecutedCut, CanExecuteCut, new KeyGesture(Key.X, ModifierKeys.Control, "Ctrl+X"));
            CommandManager.RegisterClassBindings(typeof(TextEditingControl), ApplicationCommands.Paste,
                                                 ExecutedPaste, CanExecutePaste, new KeyGesture(Key.V, ModifierKeys.Control, "Ctrl+V"));
        }