Como interceptar las acciones de Copy/Paste

Esto surgió en los foros de MSDN y la verdad es que me pareció interesante ya que puede haber situaciones en las que no queramos que el usuario copie datos para pegarlos en otra aplicación e incluso obligarle a que introduzca los datos por teclado en vez de que haga un paste.

Me puse a investigar y en la clase System.Windows.DataObject me encontré una serie de métodos estáticos que resolvían este problema

 

DataObject.AddPastingHandler(dependencyObject, handler);  

DataObject.RemovePastingHandler(dependencyObject, handler);  

 

DataObject.AddCopyingHandler(dependencyObject, handler);  

DataObject.RemovePastingHandler(dependencyObject, handler);  

 

DataObject.AddSettingDataHandler(dependencyObject, handler);  

DataObject.RemoveSettingDataHandler(dependencyObject, handler); 

 

Por ejemplo

 

  1. <TextBlock Text=»Regular TextBox: « Grid.Row=»0″ Grid.Column=»0″ />
  2.             <TextBox x:Name=»_TextBlock1″ Grid.Row=»0″ Grid.Column=»1″ />
  3.             <TextBlock Text=»No Copy: « Grid.Row=»1″ Grid.Column=»0″ />
  4.             <TextBox x:Name=»_TextBlock2″ Grid.Row=»1″ Grid.Column=»1″ />
  5.             <TextBlock Text=»No Drag Copy: « Grid.Row=»2″ Grid.Column=»0″ />
  6.             <TextBox x:Name=»_TextBlock3″ Grid.Row=»2″ Grid.Column=»1″ />
  7.             <TextBlock Text=»No Paste: « Grid.Row=»3″ Grid.Column=»0″ />
  8.             <TextBox x:Name=»_TextBlock4″ Grid.Row=»3″ Grid.Column=»1″ />
  1.   public Window1()
  2.     {
  3.       InitializeComponent();
  4.       DataObject.AddCopyingHandler(_TextBlock2, NoCopy);
  5.       DataObject.AddCopyingHandler(_TextBlock3, NoDragCopy);
  6.       DataObject.AddPastingHandler(_TextBlock4, NoPaste);
  7.     }
  8.     private void NoCopy(object sender, DataObjectCopyingEventArgs e)
  9.     {
  10.       e.CancelCommand();
  11.     }
  12.     private void NoDragCopy(object sender, DataObjectCopyingEventArgs e)
  13.     {
  14.       if (e.IsDragDrop)
  15.       { e.CancelCommand(); }
  16.     }
  17.     private void NoPaste(object sender, DataObjectPastingEventArgs e)
  18.     {
  19.       e.CancelCommand();
  20.     }
  21.   

Como veis también podemos impedir el Drag de nuestros elementos a otras aplicaciones, una manera de asegurarnos que nuestros datos no saldrán de nuestra aplicación.

Un comentario sobre “Como interceptar las acciones de Copy/Paste”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *