• WPF 解决”文本框粘贴字符串有换行时被截取“的问题


    public class TextBoxPasteHelper:DependencyObject
        {
            public static bool GetCanPasteNewLine(DependencyObject d)
            {
                return (bool)d.GetValue(CanPasteNewLineProperty);
            }
    
            public static void SetCanPasteNewLine(DependencyObject d,bool value)
            {
                d.SetValue(CanPasteNewLineProperty, value);
            }
    
            // Using a DependencyProperty as the backing store for CanPasteNewLine.  This enables animation, styling, binding, etc...
            public static readonly DependencyProperty CanPasteNewLineProperty =
                DependencyProperty.RegisterAttached("CanPasteNewLine", typeof(bool), typeof(TextBoxPasteHelper), new PropertyMetadata(default(bool),OnCanPasteNewLineChanged));
    
            private static void OnCanPasteNewLineChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                var currentTextBox = d as TextBox;
                if(currentTextBox != null)
                {
                    var cmd = new CommandBinding();
                    cmd.Command = ApplicationCommands.Paste;
                    cmd.Executed += Cmd_Executed;
                    currentTextBox.CommandBindings.Add(cmd);
                    var keyBinding = new KeyBinding();
                    keyBinding.Key = Key.V;
                    keyBinding.Modifiers = ModifierKeys.Control;
                    keyBinding.Command = ApplicationCommands.Paste;
                    currentTextBox.InputBindings.Add(keyBinding);
                }
            }
    
            private static void Cmd_Executed(object sender, ExecutedRoutedEventArgs e)
            {
                string copiedStr = Clipboard.GetText();
                if (string.IsNullOrEmpty(copiedStr))
                    return;
    
                var currentTB = sender as TextBox;
                if (currentTB != null)
                {
                    if (currentTB.SelectedText == currentTB.Text)
                    {
                        currentTB.Text = copiedStr;
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(currentTB.SelectedText))
                        {
                            currentTB.SelectedText = copiedStr;
                        }
                        else
                        {
                            StringBuilder currentStr = new StringBuilder(currentTB.Text);
                            currentStr.Insert(currentTB.CaretIndex, copiedStr);
                            currentTB.Text = currentStr.ToString();
                        }
                    }
                }
            }
        }
    使用:
    <TextBox attached:TextBoxPasteHelper.CanPasteNewLine="True"/>
  • 相关阅读:
    线程池原理分析(一)-线程池体系结构
    LinkedBlockingQueue原理分析
    ArrayBlockingQueue原理分析(二)-迭代器
    ArrayBlockingQueue原理分析(一)
    ConcurrentHashMap原理分析(二)-扩容
    ConcurrentHashMap原理分析(一)-综述
    CyclicBarrier原理分析
    Jmeter集合点技术
    Jmeter关联技术
    JMeter参数化
  • 原文地址:https://www.cnblogs.com/JqkAman/p/14138155.html
Copyright © 2020-2023  润新知