RichTextBox (WPF) не имеет строкового свойства «Текст».

114

Я пытаюсь установить / получить текст своего RichTextBox, но текст не входит в список его свойств, когда я хочу получить test.Text ...

Я использую код на C # (.NET framework 3.5 SP1)

RichTextBox test = new RichTextBox();

не могу иметь test.Text(?)

Вы знаете, как это возможно?

Насреддин
источник

Ответы:

122

чтобы установить текст RichTextBox:

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

чтобы получить текст RichTextBox:

string richText = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
sma6871
источник
2
Contructor 'Run' имеет 0 параметров, но вызывается с 1 аргументом (ами), то же самое для Paragraph
alvinmeimoun
@alvinmeimoun На самом деле, Paragraph()была Paragraph(Inline)перегрузка, по крайней мере, с .NET 3.5Run(string)тоже была допустима - это даже в примере).
Dragomok
1
почему так сложно?
prouser135
Как добавить FontFamilyв абзац?
Матеус Миранда
64

Возникла путаница между RichTextBox в System.Windows.Forms и в System.Windows.Control.

Я использую тот, который находится в элементе управления, так как использую WPF. Там нет свойства Text, и чтобы получить текст, я должен был использовать эту строку:

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

Спасибо

Марк Холл
источник
38

WPF RichTextBox имеет Documentсвойство для установки содержимого в стиле 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;

Вы можете просто использовать этот AppendTextметод, если это все, что вам нужно.

Надеюсь, это поможет.

EightyOne Unite
источник
13
string GetString(RichTextBox rtb)
{
    var textRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
    return textRange.Text;
}
user1143839
источник
13

Используя два метода расширения, это становится очень просто:

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
источник
12

В Textэлементе управления WPF RichTextBox нет свойства. Вот один из способов вывести весь текст:

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

string allText = range.Text;
Крис Амелинкс
источник
8

Как насчет того, чтобы просто сделать следующее:

_richTextBox.SelectAll();
string myText = _richTextBox.Selection.Text;
Кертис
источник
1
Лучший ответ, который я смог найти до сих пор :) Вот мой код, если вы хотите вставить rtxb_input.SelectAll(); txb_InputLength.Text = rtxb_input.Selection.Text.Length.ToString();
длину
8
RichTextBox rtf = new RichTextBox();
System.IO.MemoryStream stream = new System.IO.MemoryStream(ASCIIEncoding.Default.GetBytes(yourText));

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

ИЛИ

rtf.Selection.Text = yourText;
Винченцо Коста
источник
4

«Extended WPF Toolkit» теперь предоставляет richtextbox со свойством Text.

Вы можете получить или установить текст в разных форматах (XAML, RTF и обычный текст).

Вот ссылка: Extended WPF Toolkit RichTextBox

GiangLP
источник