[英]Making specific Text Boldefaced in a TextBox
嗨我目前有一个texbox,当用户按下不同的按钮时会向用户输出信息。 我想知道是否有办法让我的一些文字加粗,其余的不是。
我尝试过以下方法:
textBox1.FontWeight = FontWeights.UltraBold;
textBox1.Text. = ("Your Name: " );
TextBox1.FontWeight = FontWeights.Regular;
textBox1.Text += (nameVar);
唯一的问题是,使用这种方式会使一切变得大胆或什么都没有。 有没有办法做到这一点? 我在C#中使用WPF项目
任何意见或建议表示赞赏。 谢谢!
编辑:所以现在我想尝试你所有建议的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是我在我的wpf中创建的我的richtextbox的名称
谢谢
您将需要使用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>
您可以将TextBlock
与其他TextBlock
或Run
内部一起使用:
<TextBlock>
normal text
<TextBlock FontWeight="Bold">bold text</TextBlock>
more normal text
<Run FontWeight="Bold">more bold text</Run>
</TextBlock>
使用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
{ }
}
常规TextBox
仅支持此类样式属性的全部或全部设置。 您可能希望查看RichTextBox
,但是,您不能以您尝试的方式为Text
属性指定一组值 - 您需要使用FlowDocument
通过Document
属性构造文本主体。
有关使用FlowDocument
的概述和一些示例, 请阅读此内容 。
看看RichTextBox控件它基本上和TextBox一样工作,但允许更多的自定义,当然还需要Rich Text ,它允许部分格式化。
以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{ }
}
此外,我在文本之前和之后添加了唯一标记以获取文本,然后将其删除。
jwillmer的回答对我来说有些错误。 这些通过添加:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.