zoukankan      html  css  js  c++  java
  • 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"/>
  • 相关阅读:
    JSP application用法
    JSP到底内置了几大对象?
    ConcurrentHashMap之实现细节 5
    假如我是JAVA开发人员
    jBPM
    ServletContext与ServletConfig分析
    oracle建立索引原则
    70个新鲜实用的JavaScript和Ajax技术(上)
    ConcurrentHashMap之实现细节
    ConcurrentHashMap之实现细节3
  • 原文地址:https://www.cnblogs.com/JqkAman/p/14138155.html
Copyright © 2011-2022 走看看