2009-06-05 7 views
94

Sto cercando di impostare/ottenere il testo del mio RichTextBox, ma Testo non è tra le sue proprietà quando voglio test.Text ...RichTextBox (WPF) non ha la proprietà stringa "Testo"

sto usando codice dietro in C# (.NET framework 3.5 SP1)

RichTextBox test = new RichTextBox(); 

non possono avere test.Text(?)

sai come mai può essere possibile?

risposta

61

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

sto usando quella nel controllo come io sto usando WPF. Lì dentro, non v'è alcuna proprietà Text, e al fine di ottenere un testo, ho dovuto usare questa linea:

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

grazie

37

Il WPF RichTextBox ha una proprietà Document per impostare il contenuto alla 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; 

si può semplicemente utilizzare il metodo AppendText però se questo è tutto quello che stai cercando.

Spero che questo aiuti.

9

Non esiste la proprietà Text nel controllo RichTextBox WPF. Ecco un modo per ottenere tutto il testo fuori:

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

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

"esteso WPF Toolkit" fornisce ora un RichTextBox con la proprietà Text.

È possibile ottenere o impostare il testo in diversi formati (XAML, RTF e testo in chiaro).

Ecco il link: Extended WPF Toolkit RichTextBox

5

ne dite solo facendo 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 finestra di testo in una GUI: 'rtxb_input.SelectAll();' 'txb_InputLength.Text = rtxb_input.Selection.Text.Length. ToString(); ' –

91

a set RichTextBox testo:

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

a ottenere il testo RichTextBox:

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

Il comando 'Esegui' ha 0 parametro (i) ma è invocato con 1 argomento (i), lo stesso per il paragrafo – alvinmeimoun

+0

@alvinmeimoun In realtà,' Paragraph() 'ha un sovraccarico' Paragrafo (Inline) ' almeno dal momento che .NET 3.5] (https://msdn.microsoft.com/en-us/library/ms597388 (v = vs90) .aspx) (e anche 'Run (string)' era valido - è anche nel esempio). – Dragomok

+0

perché così complicato? – prouser135

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

Utilizzando due metodi di estensione, questo diventa molto facile:

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; 
    } 
} 
Problemi correlati