1. 程式人生 > 實用技巧 >WPF 解決”文字框貼上字串有換行時被擷取“的問題

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"/>