Создание специального текста, выделенного жирным шрифтом в текстовом поле
Привет. В настоящее время у меня есть 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
Спасибо
Ответы
Ответ 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, который позволяет частично форматировать..
Ответ 6
В WPF я нахожу хорошее решение http://www.devx.com/dotnet/Article/34644. Я надеюсь помочь вам.
Ответ 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{ }
}
Кроме того, я добавил уникальные теги до и после текста, чтобы получить текст, а затем удалил их.