2009-09-02 10 views
18

Qualcuno sa come posso disattivare il text wrapping di un RichTextBox? E.g. se ho una stringa grande che non entra nella finestra, lo RichTextBox posiziona la parte della stringa che non può essere mostrata di una nuova riga. Voglio disabilitarlo (e renderlo visibile solo usando lo Scrollbar).C#/WPF: Disabilita Text-Wrap di RichTextBox

Grazie mille.

Acclamazioni

risposta

27

Un RichTextBox in WPF è semplicemente un editor per un FlowDocument.
Secondo MSDN:

testo scorre sempre in un RichTextBox. Se non si desidera che il testo di avvolgere quindi impostare il PageWidth sul FlowDocument per essere più grande della larghezza della RichTextBox. Tuttavia, una volta raggiunta la larghezza della pagina , il testo viene ancora avvolto.

Così, mentre non c'è alcun modo per disattivare in modo esplicito la parola-wrapping di un RichTextBox, si può fare qualcosa di simile:

richTextBox1.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible; 
richTextBox1.Document.PageWidth = 1000; 

che avrà essenzialmente lo stesso effetto desiderato fino ad avere una linea che supera lo PageWidth.

Nota (a luglio 2015): VS2015 RC consente a wordwrap = false di funzionare esattamente come OP sembra desiderare. Credo che anche le versioni precedenti di Visual Studio abbiano funzionato.

+0

Grazie! Ha funzionato come un fascino –

+6

Non mi piace la soluzione perché quindi la Scroolbar orizzontale è visibile tutto il tempo ... – Elisabeth

+0

sarebbe bello se si potesse impostare che dopo aver rilevato (in qualche modo) che il wrapping è necessario (ad esempio controllare ogni "esecuzione" [paragrafo] larghezza o qualcosa del genere) e riaccenderlo quando non è necessario (monitorare il cambio di testo per verificare ogni volta, anche se potrebbe essere lento) –

0

Avevo anche bisogno di visualizzare una stringa grande e provato il RichTextBox ma non mi piaceva la soluzione con l'impostazione della PageWidth del documento a una dimensione fissa. La barra di scorrimento sarebbe sempre visibile e l'area di scorrimento sarebbe stata troppo grande.

Se un TextBlock è sufficiente, è possibile utilizzarlo e posizionarlo all'interno di ScrollViewer. Ha funzionato perfettamente per me dal momento che non avevo bisogno di tutte le funzionalità extra di RichTextBox.

<ScrollViewer Width="200" 
       Height="100" 
       HorizontalScrollBarVisibility="Auto" 
       VerticalScrollBarVisibility="Auto"> 
        <TextBlock TextWrapping="NoWrap"> 
         <TextBlock.Text> 
          Very long text Very long text Very long text 
         </TextBlock.Text> 
        </TextBlock> 
</ScrollViewer> 
+0

a TextBlock non modificabile, Inoltre non credo che supporti la formattazione avanzata –

+1

@GeorgeBirbilis TextBlock non è modificabile ma supporta la ricca formattazione usando tag di formattazione nidificati. Grassetto, Collegamento ipertestuale, ecc. – SepehrM

1

Se non si desidera visualizzare la barra di scorrimento orizzontale, applicare una MinWidth sul ScrollViewer:

<RichTextBox ScrollViewer.HorizontalScrollBarVisibility="Hidden"> 

    <RichTextBox.Resources> 
     <Style TargetType="ScrollViewer"> 
      <Setter Property="MinWidth" Value="2000" /> 
     </Style> 
    </RichTextBox.Resources> 

</RichTextBox>