TextBlock内のテキストのフォーマット


104

TextBlockWPFアプリケーションでコントロール内のテキストの書式を設定するにはどうすればよいですか?

例:次の例のように、特定の単語を太字で、他の単語をイタリックで、一部を異なる色で表示したいとします。

ここに画像の説明を入力してください

私の質問の背後にある理由は、この実際の問題です:

lblcolorfrom.Content = "Colour From: " + colourChange.ElementAt(3).Value.ToUpper();

文字列の2番目の部分を太字にしたいのですが、2つのコントロール(Labels、TextBlocksなど)を使用できることはわかっていますが、すでに大量のコントロールが使用されているため、使用したくありません。

回答:


139

使用する必要があります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>

ブール値として太字がある場合は、コンバーターを介してバインドできます(たとえば)。


98

これはXAMLで簡単に行うことができます。

<TextBlock>
  Hello <Bold>my</Bold> faithful <Underline>computer</Underline>.<Italic>You rock!</Italic>
</TextBlock>

素晴らしい!XAMLがこのような構成をサポートすることを知りませんでした。
Allon Guralnek、2012年

6
これはバインディングをサポートしていますか?
Arsen Mkrtchyan

11
@ArsenMkrt方法:<TextBlock FontWeight = "Bold" Text = "{Binding Budget}" />
Aetherix

2
@Aetherix私はそれを機能させることができませんでした。私はこれをqqbenqから使用しました:<TextBlock> <Bold>£</ Bold>の毎月の返済<Bold> <Run FontWeight = "Bold" Text = "{Binding MonthlyPayment}" /> </ TextBlock>
Gail Foad

49

Inlineあなたを助けることができる様々な要素があり、あなたが使用できる最も簡単なフォーマットオプションのためにBoldItalicそして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、変数をRunTextプロパティに簡単にバインドできます。

<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.");

44

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;
        }
    }
}

7

良い説明と良いサイト:

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は、太字の 斜体を使用した基本的な書式設定を示しています。と下線付きテキストます。

次に、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は、スパン関数とそれを使用したさまざまな可能性を示しています。

詳しくはサイトをチェック!


このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。- レビューから
Richard Slater

1
@Mogsdadが投稿を編集したため、コードの例が表示されます
Giellez

@RichardSlaterがコードの例を示すように投稿を編集しました
Giellez

0

これが私の解決策です...

    <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>

私は学んでいます...だから、上記の解決策について誰かが教えたなら、共有してください!:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.