Создание определенного текста с полужирным шрифтом в TextBox - PullRequest
15 голосов
/ 19 июня 2011

Привет У меня в настоящее время есть texbox, который выводит информацию пользователю, когда он нажимает разные кнопки.Мне было интересно, если бы был способ сделать только некоторые из моего текста жирным шрифтом, а остальные нет.

Я пробовал следующее:

textBox1.FontWeight = FontWeights.UltraBold;
textBox1.Text. = ("Your Name: " );
TextBox1.FontWeight = FontWeights.Regular;
textBox1.Text += (nameVar);

Единственная проблема заключается в том, что использование этого способа либосделать все жирным шрифтом или ничего.Есть ли способ сделать это?Я использую проект WPF в C #

Любые комментарии или предложения приветствуются.Спасибо!

РЕДАКТИРОВАТЬ: Итак, теперь я пытаюсь создать окно RichText, которое вы все предложили, но мне кажется, что в нем ничего не появляется:

// Create a simple FlowDocument to serve as the content input for the construtor.
FlowDocument flowDoc = new FlowDocument(new Paragraph(new Run("Simple FlowDocument")));
// After this constructor is called, the new RichTextBox rtb will contain flowDoc.
RichTextBox rtb = new RichTextBox(flowDoc);

rtb - это имя моего richtextbox iсоздано в моем wpf

Спасибо

Ответы [ 7 ]

11 голосов
/ 19 июня 2011

используйте RichTextBox, ниже метод, который я написал для этой проблемы - надеюсь, это поможет; -)

/// <summary>
/// This method highlights the assigned text with the specified color.
/// </summary>
/// <param name="textToMark">The text to be marked.</param>
/// <param name="color">The new Backgroundcolor.</param>
/// <param name="richTextBox">The RichTextBox.</param>
/// <param name="startIndex">The zero-based starting caracter position.</param>
public static void ChangeTextcolor(string textToMark, Color color, RichTextBox richTextBox, int startIndex)
{
    if (startIndex < 0 || startIndex > textToMark.Length-1) startIndex = 0;

    System.Drawing.Font newFont = new Font("Verdana", 10f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 178, false);
    try
    {               
        foreach (string line in richTextBox.Lines)
        { 
            if (line.Contains(textToMark))
            {
                richTextBox.Select(startIndex, line.Length);
                richTextBox.SelectionBackColor = color;
            }
            startIndex += line.Length +1;
        }
    }
    catch
    { }
}
11 голосов
/ 19 июня 2011

Вы можете использовать TextBlock с другими TextBlock с или Run с внутри:

<TextBlock>
    normal text
    <TextBlock FontWeight="Bold">bold text</TextBlock>
    more normal text
    <Run FontWeight="Bold">more bold text</Run>
</TextBlock>
11 голосов
/ 19 июня 2011

Вам нужно будет использовать RichTextBox для достижения этой цели:

<RichTextBox Name="richTB">
  <FlowDocument>
    <Paragraph>
      <Run FontWeight="Bold">Your Name:</Run>
      <Run Text="{Binding NameProperty}"/>
    </Paragraph>
  </FlowDocument>
</RichTextBox>

Но почему вы хотите, чтобы "Ваше имя" было редактируемым? Конечно, вы хотели бы, чтобы это был отдельный, только для чтения, ярлык?

<StackPanel Orientation="Horizontal">
    <Label FontWeight="Bold">Your Name:</Label>
    <TextBox Text="{Binding NameProperty}"/>
</StackPanel>
3 голосов
/ 19 июня 2011

Обычный TextBox поддерживает только настройку все или ничего для таких стилистических свойств. Возможно, вы захотите взглянуть на RichTextBox, однако вы не можете просто указать набор значений для свойства Text так, как вы пытались - вам нужно будет работать с FlowDocument, чтобы создать текстовое тело через свойство Document.

Для обзора работы с FlowDocument и некоторых примеров прочитайте это .

1 голос
/ 19 июня 2011

Взгляните на RichTextBox Control , он в основном работает так же, как TextBox, но допускает больше настроек и, конечно, принимает Rich Text , который допускает частичное форматирование.

0 голосов
/ 25 июня 2018

В ответе Джвилмера было несколько ошибок для меня. Они были решены путем добавления:

using System.Drawing;

и затем изменив входы на:

public static void ChangeTextcolor(string textToMark, System.Drawing.Color color, System.Windows.Forms.RichTextBox richTextBox, int startIndex)

Это потому, что мой код искал System.Windows.Controls.RichTextbox, а не Windows.Forums.RichTextBox. А System.Windows.Media.Color не System.Drawing.Color

0 голосов
/ 08 ноября 2016

Взяв отличный пример jwillmer, я внес некоторые коррективы, потому что он закрашивал всю строку ошибки для меня:

    public static void ChangeTextcolor(string textToMark, Color color, RichTextBox richTextBox)
    {
        int startIndex = 0;

        string text = richTextBox.Text;
        startIndex = text.IndexOf(textToMark);

        System.Drawing.Font newFont = new Font("Verdana", 10f, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 178, false);

        try
        {
            foreach (string line in richTextBox.Lines)
            {
                if (line.Contains(textToMark))
                {
                    richTextBox.Select(startIndex, textToMark.Length);
                    richTextBox.SelectionColor = color;
                    richTextBox.SelectionFont = newFont;
                }
            }
        }
        catch{ }
    }

Кроме того, я добавил уникальные теги до и после текста в цвет, чтобы получить текст, а затем удалил их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...