RichTextBox (WPF) n'a pas de propriété de chaîne «Texte»

113

J'essaie de définir / d'obtenir le texte de mon RichTextBox, mais le texte ne fait pas partie de la liste de ses propriétés lorsque je veux obtenir un 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?

Nasreddine
la source

Réponses:

122

pour définir le texte RichTextBox:

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

pour obtenir le texte RichTextBox:

string richText = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
sma6871
la source
2
Le contrôleur 'Run' a 0 paramètre (s) mais est invoqué avec 1 argument (s), idem pour Paragraph
alvinmeimoun
@alvinmeimoun En fait, il y Paragraph()avait une Paragraph(Inline)surcharge au moins depuis .NET 3.5 (et Run(string)était également valide - c'est même dans l'exemple).
Dragomok
1
pourquoi si compliqué?
prouser135
Comment ajouter FontFamilyen paragraphe?
Matheus Miranda
64

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à-dedans, 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

Mark Hall
la source
38

Le WPF RichTextBox a une Documentpropriété pour définir le contenu à 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 AppendTextméthode si c'est tout ce que vous recherchez.

J'espère que cela pourra aider.

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

En utilisant deux méthodes d'extension, cela devient très simple:

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
la source
12

Il n'y a aucune Textpropriété dans le contrôle WPF RichTextBox. Voici une façon de sortir tout le texte:

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

string allText = range.Text;
Chris Amelinckx
la source
8

Que diriez-vous de faire ce qui suit:

_richTextBox.SelectAll();
string myText = _richTextBox.Selection.Text;
Curtis
la source
1
Meilleure réponse que j'ai pu trouver jusqu'à présent :) Voici mon code si vous voulez coller la longueur dans une autre zone de texte dans une interface graphique: rtxb_input.SelectAll(); txb_InputLength.Text = rtxb_input.Selection.Text.Length.ToString();
Marty_in_a_Box
8
RichTextBox rtf = new RichTextBox();
System.IO.MemoryStream stream = new System.IO.MemoryStream(ASCIIEncoding.Default.GetBytes(yourText));

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

OU

rtf.Selection.Text = yourText;
Vincenzo Costa
la source
4

«Extended WPF Toolkit» fournit désormais une richtextbox avec la propriété Text.

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

Voici le lien: Extended WPF Toolkit RichTextBox

GiangLP
la source