Seleccionar y copiar texto en Silverlight 

En la actualidad, las aplicaciones en Silverlight no nos permiten seleccionar y copiar texto de una manera cómoda, sin utilizar las llamadas "Hot Keys". En este sería "Control + C", pero como ya comentaba antes, no es cómodo para el usuario tener que conocer estos métodos, es por eso que haremos el siguiente control para poder hacer esta tarea con el típico clic del botón derecho de nuestro ratón.

Lo primero será crea un control, que hereda de "Text box" y ahí gestionar todos los eventos y propiedades del control, el código será el siguiente:

 

namespace Silverlight.Common.Controls{

public class TextBoxWithCopyControl : TextBox {

ContextMenu menu = null;

MenuItem item;

 

public TextBoxWithCopyControl(){

this.MouseRightButtonDown += new

MouseButtonEventHandler(TextBoxWithCopyControlMouseRightButtonDown);

this.MouseRightButtonUp += new

MouseButtonEventHandler(TextBoxWithCopyControlMouseRightButtonUp);

}

 

void TextBoxWithCopyControlMouseRightButtonUp(object sender, MouseButtonEventArgs e) {

menu = new ContextMenu();

item = new MenuItem();

item.Header = "Copiar";

menu.Items.Add(item);

item.Click += new RoutedEventHandler(item_Click);

menu.IsOpen = true;

menu.HorizontalOffset = e.GetPosition(null).X;

menu.VerticalOffset = e.GetPosition(null).Y;

}

 

static void TextBoxWithCopyControlMouseRightButtonDown(object sender, MouseButtonEventArgs e) {

e.Handled = true;

}

 

void item_Click(object sender, RoutedEventArgs e){

Clipboard.SetText(this.Text);

}

}

}

 

Después de crear el control, tenemos que crear un estilo, ya que al heredar de "TextBox" la presentación en pantalla puede no ser la esperada, por ello creamos el siguiente estilo.

 

<Style x:Key="SelectableTextBoxStyle" TargetType="TextBox">

<Setter Property="IsReadOnly" Value="true"/>

<Setter Property="Background" Value="Transparent"/>

<Setter Property="Template">

<Setter.Value>

<ControlTemplate TargetType="TextBox">

<Grid x:Name="RootElement">

<ScrollViewer x:Name="ContentElement" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" BorderThickness="0"/>

</Grid>

</ControlTemplate>

</Setter.Value>

</Setter>

</Style>

 

Ahora solo nos queda aplicar el control a esos textos que queremos darle esta propiedad, dejo aquí un ejemplo:

 

<Controls:TextBoxWithCopyControl x:Name="txtDescription" TextWrapping="Wrap" Style="{StaticResource SelectableTextBoxStyle}" HorizontalAlignment="Left" FontSize="21.333" Foreground="#FF1F1F1F" FontWeight="Bold" FontFamily="Tahoma" Width="365" Text="{Binding Question.Description, Mode=OneWay}" Margin="4" />

 

Ahora podemos seleccionar texto y al pulsar botón derecho, nos permitirá copiarlo.

 
Si lo desea puede escribir un correo indicando el artículo y el autor al que va dirigido y realizar cuantas preguntas, sugerencias o comentarios desee. Le remitiremos contestación lo antes posible. ¡Muchas gracias!
Posted on 23-Mar-11 by Javier Bugeda

Tags: Silverlight
 

vínculos