WPF textbox ctrl+enter回车 enter触发button的click事件

WPF textbox ctrl+enter回车 enter触发button的click事件

前言

第一次写****博客,就记录一下一个小功能的实现吧,最近在做和微信相关的一个插件,其中有一块是仿照微信的发送功能,即在textbox中编辑文本时,按下enter键直接发送,按下ctrl+enter触发回车。平常都没怎么注意的操作逻辑自己实现的时候还仔细思考了一下才做出来。

界面

WPF textbox ctrl+enter回车 enter触发button的click事件

实现思路

捕捉textbox的keydown事件

按下ctrl+enter
提取光标当前位置
(不能直接使用textbox1.text+=Environment.NewLine。这只适用刚好在文本最后按下回车)
提取textbox的text,在光标位置索引处插入回车字符
(获取当前的光标位置就是为了直到回车到底插在哪里)
将新的text返回给textbox
(这个步骤会导致光标回到textbox的起始位置)
更新光标的位置
(应当是按回车前的光标右移一位)

按下enter
直接触发指定button的click事件

代码

        private void _editArea_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.Enter)
            {
                int caret = _editArea.CaretIndex;
                _editArea.Text = _editArea.Text.Insert(caret, Environment.NewLine);
                _editArea.CaretIndex = caret + Environment.NewLine.Length;
                return;
            }
            if(e.Key == Key.Enter)
            {
                sendButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
            }
        }

总结

第一次写博客,溜了