2012-10-04 11 views
10

Eventuali duplicati:
Any way to make a WPF textblock selectable?Come posso fare TextBlock come selezionabile in modo che l'utente può copiare il testo

Posso fare una selezionabile blocco di testo in un'applicazione WPF in modo che un utente può copiare esso.

Grazie in anticipo.

DJ

+0

Ah dannazione, Jay Riggs ha ragione ... Avrei dovuto prendere in considerazione prima di reiterare. +1 –

+0

Non è possibile rispondere alla domanda con una risposta errata con oltre 20 voti per eccesso dal link fornito. Ho votato questa domanda per riaprire. Non ha senso che abbia più di un anno. –

+0

Ho trovato una soluzione migliore. Si prega di controllare la mia risposta qui: https://stackoverflow.com/a/45627524/332528 – torvin

risposta

11

Si potrebbe semplicemente farne un TextBox che è di sola lettura che sembra proprio un TextBlock, un po 'come;

<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> 

ScrollViewer ContentElement sarebbe in una TextBox per impostazione predefinita, si potrebbe sostituire un ContentPresenter invece se ti piace anche.

Quindi applicarlo;

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

Spero che questo aiuti!

ADDENDUM: Come @doodleus ha sottolineato nei commenti. Il modello che lega la proprietà del contenuto all'interno del modello potrebbe essere necessario. Poiché "ContentElement" è una parte del controllo SilverBox TextBox . Una delle piccole differenze di sfumature da osservare nelle diverse varianti xaml. Non devo aver prestato attenzione ai Tag quando ho creato l'esempio originariamente. Quindi complimenti a lui per avermi corretto.

+0

sì, funziona per me. grazie .. –

+2

puoi anche Tab buttarlo in questo caso :) –

+1

un bit chiave che manca è il seguente attributo nello scrollviewer: Content = "{TemplateBinding Text}". senza questo, il testo nella casella di testo non sarà visibile. – doodlleus

Problemi correlati