Подтвердить что ты не робот

Создание специального текста, выделенного жирным шрифтом в текстовом поле

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

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

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

Только проблема заключается в том, что использование этого способа сделает все смелым или ничего. Есть ли способ сделать это? Im, использующий проект WPF в С#

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

EDIT: теперь я пытаюсь сделать окно 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

Спасибо

4b9b3361

Ответ 1

используйте 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
    { }
}

Ответ 2

Для этого вам необходимо использовать RichTextBox:

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

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

<StackPanel Orientation="Horizontal">
    <Label FontWeight="Bold">Your Name:</Label>
    <TextBox Text="{Binding NameProperty}"/>
</StackPanel>

Ответ 3

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

<TextBlock>
    normal text
    <TextBlock FontWeight="Bold">bold text</TextBlock>
    more normal text
    <Run FontWeight="Bold">more bold text</Run>
</TextBlock>

Ответ 4

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

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

Ответ 5

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

Ответ 7

Учитывая превосходный пример 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{ }
    }

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