Como interceptar las acciones de Copy/Paste - Blog de Oskar Alvarez

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.

Published 24/9/2009 7:39 por Oskar Alvarez
Archivado en:
Comparte este post:
http://geeks.ms/blogs/oalvarez/archive/2009/09/24/como-interceptar-las-acciones-de-copy-paste.aspx

Comentarios

# 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

Thursday, September 24, 2009 9:02 AM por .NET con oskar