TextBox复制剪切问题

首先在布局中添加键盘监听,如下:

<TextBox Keyboard.KeyDown="TextInput_PreviewKeyDown"/>

然后再***.xaml.cs文件中实现监听处理规则:

        private bool keydown = false;
        private void TextInput_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            var box = (TextBox)sender;
            if (!keydown)
            {
                keydown = true;
                if (e.Key == Key.Enter)//点击Enter键
                {
                    //相关处理事件
                } else if (e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.X) {//剪切
                    var selectedStr = box.SelectedText;
                   
                    if (String.IsNullOrEmpty(selectedStr)) return;
                    try {
                        Dispatcher.Invoke(() =>
                        {
                            var selStartIndex = box.SelectionStart;
                            var remainStr = box.Text.Remove(selStartIndex, selectedStr.Length);
                            box.Text = remainStr;
                            box.SelectionStart = selStartIndex;
                            Clipboard.SetDataObject(selectedStr);
                        });
                        e.Handled = true;
                    } catch (Exception ex) {
                        Console.WriteLine("剪切失败:" +ex.Message);
                    }

                   
                } else if (e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.C) {//复制
                    var selectedStr = box.SelectedText;
                    if (String.IsNullOrEmpty(selectedStr)) return;
                    try
                    {
                        Dispatcher.Invoke(() =>
                        {
                            Clipboard.SetDataObject(selectedStr);
                        });
                        e.Handled = true;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("复制失败:" + ex.Message);
                    }
                    
                }
                keydown = false;
            }
        }

注意:有的设备上使用WPF程序的剪切功能会失败,原因已经有网友整理,这里给出网友的解释说明,有兴趣可以研究看看:

https://blog.csdn.net/puncha/article/details/8174374

https://www.cnblogs.com/wliu6V/p/3506675.html?utm_source=tuicool




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值