RichTextBox (WPF) non ha la proprietà di stringa "Text"


113

Sto cercando di impostare / ottenere il testo del mio RichTextBox, ma Text non è nell'elenco delle sue proprietà quando voglio ottenere test.Text ...

Sto usando il codice dietro in C # (.net framework 3.5 SP1)

RichTextBox test = new RichTextBox();

non posso avere test.Text(?)

Sai come può essere possibile?

Risposte:


122

per impostare il testo RichTextBox:

richTextBox1.Document.Blocks.Clear();
richTextBox1.Document.Blocks.Add(new Paragraph(new Run("Text")));

per ottenere il testo RichTextBox:

string richText = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;

2
"Esegui" del costruttore ha 0 parametri ma viene richiamato con 1 argomento / i, lo stesso per Paragraph
alvinmeimoun

@alvinmeimoun In realtà, Paragraph()aveva un Paragraph(Inline)sovraccarico almeno da .NET 3.5 (ed Run(string)era anche valido - è anche nell'esempio).
Dragomok

1
perché così complicato?
prouser135

Come aggiungere FontFamilynel paragrafo?
Matheus Miranda

64

C'era una confusione tra RichTextBox in System.Windows.Forms e in System.Windows.Control

Sto usando quello nel controllo mentre sto usando WPF. Lì, non c'è la proprietà Text e per ottenere un testo, avrei dovuto usare questa riga:

string myText = new TextRange(transcriberArea.Document.ContentStart, transcriberArea.Document.ContentEnd).Text; 

Grazie


38

Il RichTextBox di WPF ha una Documentproprietà per l'impostazione del contenuto a la MSDN:

// Create a FlowDocument to contain content for the RichTextBox.
        FlowDocument myFlowDoc = new FlowDocument();

        // Add paragraphs to the FlowDocument.
        myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 1")));
        myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 2")));
        myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 3")));
        RichTextBox myRichTextBox = new RichTextBox();

        // Add initial content to the RichTextBox.
        myRichTextBox.Document = myFlowDoc;

Puoi semplicemente usare il AppendTextmetodo se è tutto ciò che cerchi.

Spero che aiuti.


13
string GetString(RichTextBox rtb)
{
    var textRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
    return textRange.Text;
}

13

Utilizzando due metodi di estensione, questo diventa molto semplice:

public static class Ext
{
    public static void SetText(this RichTextBox richTextBox, string text)
    {
        richTextBox.Document.Blocks.Clear();
        richTextBox.Document.Blocks.Add(new Paragraph(new Run(text)));
    }

    public static string GetText(this RichTextBox richTextBox)
    {
        return new TextRange(richTextBox.Document.ContentStart,
            richTextBox.Document.ContentEnd).Text;
    }
}

12

Non è presente alcuna Textproprietà nel controllo RichTextBox di WPF. Ecco un modo per ottenere tutto il testo:

TextRange range = new TextRange(myRTB.Document.ContentStart, myRTB.Document.ContentEnd);

string allText = range.Text;

8

Che ne dici di fare semplicemente quanto segue:

_richTextBox.SelectAll();
string myText = _richTextBox.Selection.Text;

1
La migliore risposta che ho trovato finora :) Qui il mio codice se vuoi incollare la lunghezza in un'altra casella di testo in una GUI: rtxb_input.SelectAll(); txb_InputLength.Text = rtxb_input.Selection.Text.Length.ToString();
casella di

8
RichTextBox rtf = new RichTextBox();
System.IO.MemoryStream stream = new System.IO.MemoryStream(ASCIIEncoding.Default.GetBytes(yourText));

rtf.Selection.Load(stream, DataFormats.Rtf);

O

rtf.Selection.Text = yourText;

4

"Extended WPF Toolkit" ora fornisce una casella di testo RTF con la proprietà Text.

Puoi ottenere o impostare il testo in diversi formati (XAML, RTF e testo normale).

Ecco il collegamento: Extended WPF Toolkit RichTextBox


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.