WPFアプリケーションでTextBlock
コントロール内のテキストの書式を設定するにはどうすればよいですか?
例:次の例のように、特定の単語を太字で、他の単語を斜体で、いくつかの色を変えたいです。
私の質問の背後にある理由は、この実際の問題です。
lblcolorfrom.Content = "Colour From: " + colourChange.ElementAt(3).Value.ToUpper();
文字列の2番目の部分を太字にしたいと思います。2つのコントロール(ラベル、TextBlocksなど)を使用できることはわかっていますが、すでに使用されている膨大な量のコントロールのため、そうではありません。
Inlines
を使用する必要があります。
<TextBlock.Inlines>
<Run FontWeight="Bold" FontSize="14" Text="This is WPF TextBlock Example. " />
<Run FontStyle="Italic" Foreground="Red" Text="This is red text. " />
</TextBlock.Inlines>
バインディングあり:
<TextBlock.Inlines>
<Run FontWeight="Bold" FontSize="14" Text="{Binding BoldText}" />
<Run FontStyle="Italic" Foreground="Red" Text="{Binding ItalicText}" />
</TextBlock.Inlines>
他のプロパティをバインドすることもできます:
<TextBlock.Inlines>
<Run FontWeight="{Binding Weight}"
FontSize="{Binding Size}"
Text="{Binding LineOne}" />
<Run FontStyle="{Binding Style}"
Foreground="Binding Colour}"
Text="{Binding LineTwo}" />
</TextBlock.Inlines>
ブール値(たとえば)として太字を持っている場合は、コンバーターを介してバインドできます。
XAMLでこれを簡単に実行できます。
<TextBlock>
Hello <Bold>my</Bold> faithful <Underline>computer</Underline>.<Italic>You rock!</Italic>
</TextBlock>
Charles Petzolds Bool Application = Code + markupからこの例を確認してください
//----------------------------------------------
// FormatTheText.cs (c) 2006 by Charles Petzold
//----------------------------------------------
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Documents;
namespace Petzold.FormatTheText
{
class FormatTheText : Window
{
[STAThread]
public static void Main()
{
Application app = new Application();
app.Run(new FormatTheText());
}
public FormatTheText()
{
Title = "Format the Text";
TextBlock txt = new TextBlock();
txt.FontSize = 32; // 24 points
txt.Inlines.Add("This is some ");
txt.Inlines.Add(new Italic(new Run("italic")));
txt.Inlines.Add(" text, and this is some ");
txt.Inlines.Add(new Bold(new Run("bold")));
txt.Inlines.Add(" text, and let's cap it off with some ");
txt.Inlines.Add(new Bold(new Italic (new Run("bold italic"))));
txt.Inlines.Add(" text.");
txt.TextWrapping = TextWrapping.Wrap;
Content = txt;
}
}
}
役立つさまざまな Inline
要素があります。最も単純なフォーマットオプションには Bold
、 Italic
および Underline
を使用できます=:
<TextBlock>
Sample text with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> words.
</TextBlock>
これらの要素は、実際にはさまざまなプロパティが設定された Span
要素の略記であることに注意する価値があると思います(つまり、Bold
の場合、FontWeight
プロパティはFontWeights.Bold
に設定されます)。
これにより、次のオプション:前述の Span
要素が表示されます。
この要素で上記と同じ効果を達成できますが、さらに多くの可能性が与えられます。 (特に)Foreground
またはBackground
プロパティを設定できます。
<TextBlock>
Sample text with <Span FontWeight="Bold">bold</Span>, <Span FontStyle="Italic">italic</Span> and <Span TextDecorations="Underline">underlined</Span> words. <Span Foreground="Blue">Coloring</Span> <Span Foreground="Red">is</Span> <Span Background="Cyan">also</Span> <Span Foreground="Silver">possible</Span>.
</TextBlock>
Span
要素には、次のような他の要素も含まれる場合があります。
<TextBlock>
<Span FontStyle="Italic">Italic <Span Background="Yellow">text</Span> with some <Span Foreground="Blue">coloring</Span>.</Span>
</TextBlock>
Span
と非常によく似た別の要素があり、それは Run
と呼ばれます。 Run
には他のインライン要素を含めることはできませんが、Span
には含めることができますが、変数をRun
のText
プロパティに簡単にバインドできます。
<TextBlock>
Username: <Run FontWeight="Bold" Text="{Binding UserName}"/>
</TextBlock>
また、必要に応じて、コードビハインドからすべての書式設定を行うことができます。
TextBlock tb = new TextBlock();
tb.Inlines.Add("Sample text with ");
tb.Inlines.Add(new Run("bold") { FontWeight = FontWeights.Bold });
tb.Inlines.Add(", ");
tb.Inlines.Add(new Run("italic ") { FontStyle = FontStyles.Italic });
tb.Inlines.Add("and ");
tb.Inlines.Add(new Run("underlined") { TextDecorations = TextDecorations.Underline });
tb.Inlines.Add("words.");
良い説明と良いサイト:
http://www.wpf-tutorial.com/basic-controls/the-textblock-control-inline-formatting/
ここでは、著者があなたが探しているものの良い例を挙げています!このサイトは研究資料に最適であり、WPFにある多くのオプションをカバーしています
編集
テキストをフォーマットするにはさまざまな方法があります。基本的な書式設定(私の意見では最も簡単です):
<TextBlock Margin="10" TextWrapping="Wrap">
TextBlock with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> text.
</TextBlock>
例1は、BoldItallicおよび下線付きテキストを使用した基本的な書式設定を示しています。
次に、SPANメソッドを示します。これにより、テキストを強調表示できます。
<TextBlock Margin="10" TextWrapping="Wrap">
This <Span FontWeight="Bold">is</Span> a
<Span Background="Silver" Foreground="Maroon">TextBlock</Span>
with <Span TextDecorations="Underline">several</Span>
<Span FontStyle="Italic">Span</Span> elements,
<Span Foreground="Blue">
using a <Bold>variety</Bold> of <Italic>styles</Italic>
</Span>.
</TextBlock>
例2は、span関数とそれによるさまざまな可能性を示しています。
詳細な説明については、サイトをチェックしてください!
これが私の解決策です...
<TextBlock TextWrapping="Wrap" Style="{DynamicResource InstructionStyle}">
<Run Text="This wizard will take you through the purge process in the correct order." FontWeight="Bold"></Run>
<LineBreak></LineBreak>
<Run Text="To Begin, select" FontStyle="Italic"></Run>
<Run x:Name="InstructionSection" Text="'REPLACED AT RUNTIME'" FontWeight="Bold"></Run>
<Run Text="from the menu." FontStyle="Italic"></Run>
</TextBlock>
私は学んでいます...だから誰かが上記の解決策について考えているなら共有してください! :)