こんにちは私は現在、ユーザーが別のボタンを押したときに情報を出力するtexboxを持っています。私のテキストの一部だけを太字にして他の部分を太字にしない方法があるのだろうかと思っていました。
私は以下を試しました:
textBox1.FontWeight = FontWeights.UltraBold;
textBox1.Text. = ("Your Name: " );
TextBox1.FontWeight = FontWeights.Regular;
textBox1.Text += (nameVar);
唯一の問題は、この方法を使用すると、すべてが大胆になるか、何もなくなることです。これを行う方法はありますか?私はC#でWPFプロジェクトを使用しています
コメントや提案は大歓迎です。ありがとう!
編集:だから今あなたがすべて提案したリッチテキストボックスを作ろうとしているのですが、そこに何も表示されないようです:
// 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を使用してください-それが役に立てば幸いです;-)
/// <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
{ }
}
これを実現するには、 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
sまたはRun
sと一緒に使用できます。
<TextBlock>
normal text
<TextBlock FontWeight="Bold">bold text</TextBlock>
more normal text
<Run FontWeight="Bold">more bold text</Run>
</TextBlock>
通常のTextBox
は、このようなスタイルプロパティのall or nothing設定のみをサポートします。 RichTextBox
を確認することもできますが、Text
プロパティに一連の値を指定した方法で指定することはできません。 FlowDocument
プロパティを使用してテキスト本文を作成するには、 Document
を使用する必要があります。
FlowDocument
の操作の概要といくつかの例については、 これを読んでください です。
RichTextBox Control を見てください。これは基本的にTextBoxと同じように機能しますが、より多くのカスタマイズが可能で、もちろん Rich Text は部分的な書式設定を可能にします。
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
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{ }
}
また、テキストの前後に色を付けるためにテキストの前後に一意のタグを追加して、それらを削除しました。