RichTextBox (WPF) não possui a propriedade de string “Text”

113

Estou tentando definir / obter o texto do meu RichTextBox, mas Text não está entre a lista de suas propriedades quando desejo obter test.Text ...

Estou usando code behind em C # (.net framework 3.5 SP1)

RichTextBox test = new RichTextBox();

não pode ter test.Text(?)

Você sabe como isso pode ser possível?

Nasreddine
fonte

Respostas:

122

para definir o texto RichTextBox:

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

para obter o texto RichTextBox:

string richText = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
sma6871
fonte
2
O contrator 'Executar' tem 0 parâmetro (s), mas é invocado com 1 argumento (s), o mesmo para o Parágrafo
alvinmeimoun
@alvinmeimoun Na verdade, Paragraph()tinha uma Paragraph(Inline)sobrecarga pelo menos desde o .NET 3.5 (e Run(string)também era válido - está até no exemplo).
Dragomok
1
por que tão complicado?
prouser135
Como adicionar um FontFamilyparágrafo?
Matheus Miranda
64

Houve uma confusão entre RichTextBox em System.Windows.Forms e em System.Windows.Control

Estou usando o do Controle como estou usando o WPF. Lá, não há propriedade Text e, para obter um texto, deveria ter usado esta linha:

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

obrigado

Mark Hall
fonte
38

O WPF RichTextBox tem uma Documentpropriedade para definir o conteúdo à 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;

Você pode simplesmente usar o AppendTextmétodo, se isso é tudo o que você procura.

Espero que ajude.

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

Usando dois métodos de extensão, isso se torna muito fácil:

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
fonte
12

Não há nenhuma Textpropriedade no controle WPF RichTextBox. Esta é uma maneira de obter todo o texto:

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

string allText = range.Text;
Chris Amelinckx
fonte
8

Que tal fazer o seguinte:

_richTextBox.SelectAll();
string myText = _richTextBox.Selection.Text;
Curtis
fonte
1
A melhor resposta que consegui encontrar até agora :) Aqui está meu código, se você quiser colar o Comprimento em outra caixa de texto em uma GUI: 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
fonte
4

"Extended WPF Toolkit" agora fornece uma caixa de texto rica com a propriedade Text.

Você pode obter ou definir o texto em diferentes formatos (XAML, RTF e texto simples).

Aqui está o link: Extended WPF Toolkit RichTextBox

GiangLP
fonte