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"/>
  • 相关阅读:
    jQuery表单验证以及将表单序列化为json对象小练习
    判断客户端浏览器是否安装了Flash插件
    css文本超出2行就隐藏并显示省略号
    jquery and js 判断一个元素是否存在
    jquery表单实时验证
    trigger()和triggerHandler()
    IE浏览器下面要实现滤镜(transparent),必须要加filter
    使用javascript判断浏览器类型
    web引入
    前端大纲********
  • 原文地址:https://www.cnblogs.com/JqkAman/p/14138155.html
Copyright © 2011-2022 走看看