RichTextBox (WPF) no tiene la propiedad de cadena "Texto"

113

Estoy tratando de establecer / obtener el texto de mi RichTextBox, pero el texto no se encuentra entre la lista de sus propiedades cuando quiero obtener test.Text ...

Estoy usando código detrás en C # (.net framework 3.5 SP1)

RichTextBox test = new RichTextBox();

no puede tener test.Text(?)

¿Sabes por qué puede ser posible?

Nasreddine
fuente

Respuestas:

122

para configurar el texto RichTextBox:

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

para obtener texto RichTextBox:

string richText = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
sma6871
fuente
2
Contructor 'Run' tiene 0 parámetro (s), pero se invoca con 1 argumento (s), lo mismo para el párrafo
alvinmeimoun
@alvinmeimoun En realidad, Paragraph()tuve una Paragraph(Inline)sobrecarga al menos desde .NET 3.5 (y Run(string)también era válido, incluso en el ejemplo).
Dragomok
1
por que tan complicado
prouser135
¿Cómo agregar un FontFamilypárrafo?
Matheus Miranda
64

Hubo una confusión entre RichTextBox en System.Windows.Forms y en System.Windows.Control

Estoy usando el del Control ya que estoy usando WPF. Allí, no hay una propiedad Text, y para obtener un texto, debería haber usado esta línea:

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

Gracias

Mark Hall
fuente
38

El RichTextBox de WPF tiene una Documentpropiedad para configurar el contenido 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;

Sin AppendTextembargo, puedes usar el método si eso es todo lo que buscas.

Espero que ayude.

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

Usando dos métodos de extensión, esto se vuelve muy 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
fuente
12

No hay ninguna Textpropiedad en el control WPF RichTextBox. Esta es una forma de sacar todo el texto:

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

string allText = range.Text;
Chris Amelinckx
fuente
8

¿Qué tal simplemente hacer lo siguiente:

_richTextBox.SelectAll();
string myText = _richTextBox.Selection.Text;
Curtis
fuente
1
La mejor respuesta que pude encontrar hasta ahora :) Aquí mi código si desea pegar la longitud en otro cuadro de texto en una 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);

O

rtf.Selection.Text = yourText;
Vincenzo Costa
fuente
4

"Extended WPF Toolkit" ahora proporciona un cuadro de texto enriquecido con la propiedad Text.

Puede obtener o configurar el texto en diferentes formatos (XAML, RTF y texto sin formato).

Aquí está el enlace: Kit de herramientas WPF extendido RichTextBox

GiangLP
fuente