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?

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;

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


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.


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

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

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;

8

Que diriez-vous de faire ce qui suit:

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

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;

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


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.