wake-up-neo.com

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

Ich versuche, den Text meiner RichTextBox festzulegen/zu erhalten, aber Text ist nicht in der Liste seiner Eigenschaften, wenn ich test.Text ...

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

RichTextBox test = new RichTextBox();

kann test.Text(?) nicht haben

Wissen Sie, wie es möglich sein kann?

105
paradisonoir

zu set RichTextBox Text:

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

zu get RichTextBox-Text:

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

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

Ich verwende die in der Steuerung, während ich WPF verwende. Dort gibt es keine Texteigenschaft, 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

62
paradisonoir

Die WPF RichTextBox verfügt über eine Document-Eigenschaft 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 jedoch nur die AppendText-Methode verwenden, wenn Sie danach nur noch danach suchen.

Hoffentlich hilft das.

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

Im WPF RichTextBox-Steuerelement gibt es keine Text-Eigenschaft. Hier ist eine Möglichkeit, den gesamten Text herauszuholen:

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

string allText = range.Text;
10
Chris Amelinckx
RichTextBox rtf = new RichTextBox();
System.IO.MemoryStream stream = new System.IO.MemoryStream(ASCIIEncoding.Default.GetBytes(yourText));

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

OR

rtf.Selection.Text = yourText;
8
Vincenzo Costa

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;
    }
}
8
Smile4ever

Wie wäre es, wenn Sie Folgendes tun:

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

"Extended WPF Toolkit" enthält jetzt eine Richtextbox mit der Text-Eigenschaft.

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

Hier der Link: Erweitertes WPF-Toolkit RichTextBox

4
GiangLP

In meinem Fall musste ich a RTF Text in Klartext umwandeln: Was ich (mithilfe von Xceed WPF Toolkit) wie in der GiangLP-Antwort tat; und meinen Code in einer Erweiterungsmethode einstellen:

public static string RTFToPlainText(this string s)
    {
       // for information : default Xceed.Wpf.Toolkit.RichTextBox formatter is RtfFormatter 
        Xceed.Wpf.Toolkit.RichTextBox rtBox = new Xceed.Wpf.Toolkit.RichTextBox(new System.Windows.Documents.FlowDocument());
        rtBox.Text = s;
        rtBox.TextFormatter = new Xceed.Wpf.Toolkit.PlainTextFormatter();
        return rtBox.Text;

    }
0
Xavave