TextBlock에서 텍스트 서식 지정


104

TextBlock내 WPF 응용 프로그램 의 컨트롤 내에서 텍스트 서식을 어떻게 지정 합니까?

예 : 다음 예와 같이 특정 단어는 굵게, 다른 단어는 기울임 꼴로, 일부는 다른 색상으로 표시하고 싶습니다.

여기에 이미지 설명 입력

내 질문의 이유는 다음과 같은 실제 문제입니다.

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

문자열의 두 번째 부분을 굵게 표시하고 싶습니다. 두 개의 컨트롤 (라벨, 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

6
이것이 바인딩을 지원합니까?
Arsen Mkrtchyan

11
@ArsenMkrt 방법 : <TextBlock FontWeight = "Bold"Text = "{Binding Budget}"/>
Aetherix 2013

2
@Aetherix 나는 그것을 작동시킬 수 없었다. 나는 qqbenq에서 이것을 사용했습니다 : <TextBlock> 월별 <Bold> £ </ Bold> <Run FontWeight = "Bold"Text = "{Binding MonthlyPayment}"/> </ TextBlock>
Gail Foad

49

이 다양 Inline사용할 수있는 간단한 서식 옵션에 대한 당신을 도울 수있는 요소는 Bold, ItalicUnderline:

<TextBlock>
    Sample text with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> words.
</TextBlock>

여기에 이미지 설명 입력

이 요소는 사실 Span다양한 속성이 설정된 요소에 대한 속기 일 뿐이라는 점에 주목할 가치가 있습니다 (예 : for 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.