web-dev-qa-db-fra.com

RichTextBox (WPF) n'a pas de propriété de chaîne "Text"

J'essaie de définir/obtenir le texte de mon RichTextBox, mais Text n'est pas dans la liste de ses propriétés lorsque je souhaite obtenir test.Text.

J'utilise le code derrière en C # (.net framework 3.5 SP1)

RichTextBox test = new RichTextBox();

ne peut pas avoir test.Text(?)

Savez-vous comment cela peut être possible?

105
paradisonoir

to set RichTextBox text:

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

to get RichTextBox text:

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

Il y avait une confusion entre RichTextBox dans System.Windows.Forms et dans System.Windows.Control

J'utilise celui du contrôle comme j'utilise WPF. Là, il n'y a pas de propriété Text, et pour obtenir un texte, j'aurais dû utiliser cette ligne:

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

merci

62
paradisonoir

WPF RichTextBox a une propriété Document pour définir le contenu 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;

Vous pouvez simplement utiliser la méthode AppendText si c'est tout ce que vous recherchez.

J'espère que cela pourra aider.

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

Il n'y a pas de propriété Text dans le contrôle WPF RichTextBox. Voici un moyen de sortir tout le texte:

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

En utilisant deux méthodes d'extension, cela devient très 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;
    }
}
8
Smile4ever

Pourquoi ne pas faire ce qui suit:

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

"Extended WPF Toolkit" fournit maintenant une richtextbox avec la propriété Text.

Vous pouvez obtenir ou définir le texte dans différents formats (XAML, RTF et texte en clair).

Voici le lien: Extended WPF Toolkit RichTextBox

4
GiangLP

Dans mon cas, je devais convertir un texte RTF en texte brut: et mettre mon code dans une méthode d'extension:

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