RichTextBox (WPF) hat keine String-Eigenschaft "Text"

112

Ich versuche, den Text meiner RichTextBox festzulegen / abzurufen, aber Text gehört nicht zu den Eigenschaften, wenn ich test.Text ...

Ich verwende Code in C # (.net Framework 3.5 SP1)

RichTextBox test = new RichTextBox();

nicht haben können test.Text(?)

Wissen Sie, warum es möglich sein kann?

Nasreddine
quelle

Antworten:

122

So legen Sie den RichTextBox-Text fest:

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

zu erhalten RichTextBox Text:

string richText = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
sma6871
quelle
2
Der Konstruktor 'Run' hat 0 Parameter, wird jedoch mit 1 Argument (en) aufgerufen, dasselbe gilt für Paragraph
alvinmeimoun
@alvinmeimoun Eigentlich Paragraph()hatte eine Paragraph(Inline)Überlastung mindestens seit .NET 3.5 (und Run(string)war auch gültig - es ist sogar im Beispiel).
Dragomok
1
warum so kompliziert?
Prouser135
Wie FontFamilyin Absatz hinzufügen ?
Matheus Miranda
64

Es gab eine Verwechslung zwischen RichTextBox in System.Windows.Forms und in System.Windows.Control

Ich verwende die in der Steuerung, wie ich WPF verwende. Dort gibt es keine Text-Eigenschaft, und um einen Text zu erhalten, hätte ich diese Zeile verwenden sollen:

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

Vielen Dank

Mark Hall
quelle
38

Die WPF RichTextBox verfügt über eine DocumentEigenschaft zum Festlegen des Inhalts 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;

Sie können die AppendTextMethode jedoch einfach verwenden , wenn das alles ist, wonach Sie suchen.

Hoffentlich hilft das.

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

Mit zwei Erweiterungsmethoden wird dies sehr einfach:

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;
    }
}
Smile4ever
quelle
12

TextDas WPF RichTextBox-Steuerelement enthält keine Eigenschaft. Hier ist eine Möglichkeit, den gesamten Text herauszuholen:

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

string allText = range.Text;
Chris Amelinckx
quelle
8

Wie wäre es einfach mit folgendem:

_richTextBox.SelectAll();
string myText = _richTextBox.Selection.Text;
Curtis
quelle
1
Beste Antwort, die ich bisher finden konnte :) Hier mein Code, wenn Sie die Länge in ein anderes Textfeld in einer GUI rtxb_input.SelectAll(); txb_InputLength.Text = rtxb_input.Selection.Text.Length.ToString();
einfügen
8
RichTextBox rtf = new RichTextBox();
System.IO.MemoryStream stream = new System.IO.MemoryStream(ASCIIEncoding.Default.GetBytes(yourText));

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

ODER

rtf.Selection.Text = yourText;
Vincenzo Costa
quelle
4

"Extended WPF Toolkit" bietet jetzt eine Richtextbox mit der Text-Eigenschaft.

Sie können den Text in verschiedenen Formaten (XAML, RTF und Klartext) abrufen oder festlegen.

Hier ist der Link: Erweitertes WPF Toolkit RichTextBox

GiangLP
quelle