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
- <TextBlock Text="Regular TextBox: " Grid.Row="0" Grid.Column="0" />
- <TextBox x:Name="_TextBlock1" Grid.Row="0" Grid.Column="1" />
-
- <TextBlock Text="No Copy: " Grid.Row="1" Grid.Column="0" />
- <TextBox x:Name="_TextBlock2" Grid.Row="1" Grid.Column="1" />
-
- <TextBlock Text="No Drag Copy: " Grid.Row="2" Grid.Column="0" />
- <TextBox x:Name="_TextBlock3" Grid.Row="2" Grid.Column="1" />
-
- <TextBlock Text="No Paste: " Grid.Row="3" Grid.Column="0" />
- <TextBox x:Name="_TextBlock4" Grid.Row="3" Grid.Column="1" />
-
- public Window1()
- {
- InitializeComponent();
- DataObject.AddCopyingHandler(_TextBlock2, NoCopy);
- DataObject.AddCopyingHandler(_TextBlock3, NoDragCopy);
- DataObject.AddPastingHandler(_TextBlock4, NoPaste);
- }
-
- private void NoCopy(object sender, DataObjectCopyingEventArgs e)
- {
- e.CancelCommand();
- }
-
- private void NoDragCopy(object sender, DataObjectCopyingEventArgs e)
- {
- if (e.IsDragDrop)
- { e.CancelCommand(); }
- }
-
- private void NoPaste(object sender, DataObjectPastingEventArgs e)
- {
- e.CancelCommand();
- }
- \
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.