2012-10-04 18 views
10

Duplicar posibles:
Any way to make a WPF textblock selectable?¿Cómo puedo hacer TextBlock como seleccionable por lo que el usuario puede copiar el texto

¿Puedo hacer una seleccionable bloque de texto en la aplicación de WPF de manera que un usuario puede copiar eso.

Gracias de antemano.

DJ

+0

Ah, maldición, Jay Riggs tiene razón ... Debería haberlo considerado antes de volver a iterar. +1 –

+0

La pregunta no puede responderse con una respuesta errónea con más de 20 votos a favor del enlace proporcionado. Voté esta pregunta para reabrir. No tiene sentido que tenga más de un año. –

+0

Encontré una mejor solución. Por favor, compruebe mi respuesta aquí: https://stackoverflow.com/a/45627524/332528 – torvin

Respuesta

11

Se podía hacerlo en un cuadro de texto que ha de sólo lectura, que sólo se parece a un TextBlock, algo así como;

<Style x:Key="ReadOnlyTextBox" TargetType="TextBox"> 
    <Setter Property="IsReadOnly" Value="True" /> 
    <Setter Property="Padding" Value="5"/> 
    <Setter Property="Margin" Value="0"/> 
    <Setter Property="Background" Value="Transparent"/> 
    <Setter Property="BorderBrush" Value="Transparent"/> 
    <Setter Property="BorderThickness" Value="0"/> 
    <Setter Property="IsTabStop" Value="False"/> 
    <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/> 
    <Setter Property="VerticalScrollBarVisibility" Value="Disabled"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="TextBox"> 
      <Grid x:Name="RootElement"> 
       <ScrollViewer x:Name="ContentElement" 
          Margin="{TemplateBinding Margin}" 
          Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          IsTabStop="{TemplateBinding IsTabStop}" 
          Padding="{TemplateBinding Padding}" 
          HorizontalScrollBarVisibility="{TemplateBinding HorizontalScrollBarVisibility}" 
          VerticalScrollBarVisibility="{TemplateBinding VerticalScrollBarVisibility}"/> 
      </Grid> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

El ScrollViewer ContentElement sería en un cuadro de texto por defecto, se puede sustituir por un ContentPresenter lugar si te gusta también.

Luego, póngalo en práctica;

<TextBox Text="Blah Blah Blah you can copy me!" Style="{StaticResource ReadOnlyTextBox}"/> 

Hope this helps!

ADDENDUM: Como señaló @doodleus en los comentarios. Plantilla que vincula la propiedad de contenido dentro de la plantilla puede ser necesaria. Como "ContentElement" es una llamada parte del control Silverlight TextBox. Una de las pequeñas diferencias de matices a tener en cuenta en las diferentes variantes xaml. No debí haber prestado atención a las Etiquetas cuando originalmente creé el ejemplo. Así que felicitaciones a él por corregirme.

+0

sí funciona para mí. gracias .. –

+2

también puede tab arrojarlo en este caso :) –

+1

un bit clave que falta es el siguiente atributo en el scrollviewer: Content = "{TemplateBinding Text}". sin esto, el texto en el cuadro de texto no estará visible. – doodlleus

Cuestiones relacionadas