17

こんにちは、現在、ユーザーが異なるボタンを押したときに情報を出力するテキストボックスがあります。テキストの一部だけを太字にし、残りは太字にしない方法があるかどうか疑問に思っていました。

私は次のことを試しました:

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で他TextBlockの s またはs と一緒に使用できます。Run

<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

RichTextBoxこれを実現するには、 a を使用する必要があります。

<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設定のみをサポートします。を調べたいと思うかもしれませんが、試した方法でプロパティの値のセットを指定することはできません.プロパティを介してテキスト本文を構築するには、 を使用する必要があります.RichTextBoxTextFlowDocumentDocument

の操作の概要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 に答える