using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using DTS.Common.Controls; using DTS.Common.Events; using Microsoft.Practices.Prism.Events; using Microsoft.Practices.ServiceLocation; namespace DTS.Common.Behaviors { public class TextBoxPasteBehavior { public static readonly DependencyProperty PasteCommandProperty = DependencyProperty.RegisterAttached( "PasteCommand", typeof(ICommand), typeof(TextBoxPasteBehavior), new FrameworkPropertyMetadata(PasteCommandChanged) ); public static ICommand GetPasteCommand(DependencyObject target) { return (ICommand)target.GetValue(PasteCommandProperty); } public static void SetPasteCommand(DependencyObject target, ICommand value) { target.SetValue(PasteCommandProperty, value); } private static void PasteCommandChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { TextBox textBox = sender as TextBox; if (null == textBox && sender is ChannelCodeBuilder ccb) { textBox = ccb.MainEditBox; } else if (null == textBox && sender is ChannelNameBuilder cnb) { textBox = cnb.MainEditBox; } var newValue = (ICommand)e.NewValue; textBox.RemoveHandler(CommandManager.ExecutedEvent, new RoutedEventHandler(CommandExecuted)); if (newValue != null) { textBox.AddHandler(CommandManager.ExecutedEvent, new RoutedEventHandler(CommandExecuted), true); } } private static void CommandExecuted(object sender, RoutedEventArgs e) { if( !(e is ExecutedRoutedEventArgs eArgs)) { return; } if (eArgs.Command != ApplicationCommands.Paste) { if (eArgs.Command is RoutedUICommand secureUICommand) { if( secureUICommand.Name != "Paste") { return; } } else{ return; } } TextBox textBox = sender as TextBox; if (null == sender && sender is ChannelCodeBuilder ccb) { textBox = ccb.MainEditBox; } else if (null == sender && sender is ChannelNameBuilder cnb) { textBox = cnb.MainEditBox; } var command = GetPasteCommand(textBox); try { var text = Clipboard.GetText(); var lines = text.Split(new[] {Environment.NewLine}, StringSplitOptions.None); if (command.CanExecute(null)) command.Execute(textBox); e.Handled = true; } catch (Exception ex) { var eventAggregator = ServiceLocator.Current.GetInstance(); eventAggregator.GetEvent().Publish(new PageErrorArg(new[] {ex.Message}, null)); } } } }