在TextBox中制作特定的文本Boldefaced

时间:2011-06-19 17:18:39

标签: c# wpf textbox bold

您好我目前有一个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的名称

由于

7 个答案:

答案 0 :(得分:11)

您需要使用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>

答案 1 :(得分:11)

您可以将TextBlock与其他TextBlockRun一起使用:

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

答案 2 :(得分:10)

使用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
    { }
}

答案 3 :(得分:3)

常规TextBox仅支持此类样式属性的全部或全部设置。您可能希望查看RichTextBox,但是,您不能以您尝试过的方式为Text属性指定一组值 - 您需要使用{{3}通过FlowDocument属性构建文本正文。

有关使用FlowDocument的概述以及一些示例Document

答案 4 :(得分:1)

看看RichTextBox Control它基本上和TextBox一样工作,但允许更多的自定义,当然还需要Rich Text,允许部分格式化。

答案 5 :(得分:0)

以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{ }
    }

另外,我在文本之前和之后添加了唯一标记来着色以获取文本,然后将其删除。

答案 6 :(得分:0)

jwillmer的回答对我来说有一些错误。通过添加以下内容解决了这些问题:

NAVIGATION_ICONS

,然后将输入更改为:

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