17

嗨,我目前有一个 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 中创建的富文本框的名称

谢谢

4

7 回答 7

13

在我为这个问题编写的方法下方使用 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
    { }
}
于 2011-06-19T17:45:44.053 回答
12

您可以TextBlock与其他TextBlocks 或Runs 一起使用:

<TextBlock>
    normal text
    <TextBlock FontWeight="Bold">bold text</TextBlock>
    more normal text
    <Run FontWeight="Bold">more bold text</Run>
</TextBlock>
于 2011-06-19T17:30:27.787 回答
11

您将需要使用 aRichTextBox来实现此目的:

<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>
于 2011-06-19T17:24:44.453 回答
4

常规TextBox仅支持此类样式属性的全有或全无设置。但是,您可能想研究一下RichTextBox,您不能只以Text您尝试过的方式为属性指定一组值 - 您需要使用 a来通过该属性FlowDocument构造您的文本正文。Document

有关使用 a 的概述FlowDocument和一些示例,请阅读

于 2011-06-19T17:25:31.593 回答
1

看一下RichTextBox 控件,它的工作原理与 TextBox 基本相同,但允许进行更多自定义,当然还采用允许部分格式化的富文本。

于 2011-06-19T17:25:22.203 回答
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{ }
    }

此外,我在文本之前和之后添加了唯一标签以获取文本,然后将其删除。

于 2016-11-08T14:34:50.390 回答
0

jwillmer 的回答对我来说有一些错误。这些是通过添加解决的:

using System.Drawing;

然后将输入更改为:

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

这是因为我的代码正在寻找System.Windows.Controls.RichTextboxnot Windows.Forums.RichTextBox。而System.Windows.Media.Color不是System.Drawing.Color

于 2018-06-25T07:47:25.803 回答