Форматування тексту в TextBlock


104

Як домогтися форматування тексту всередині елемента TextBlockкерування в моєму додатку WPF?

наприклад: Я хотів би, щоб певні слова були виділені жирним шрифтом, інші - курсивом, а деякі - різними кольорами, як у цьому прикладі:

введіть тут опис зображення

Причиною мого питання є ця актуальна проблема:

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

Мені б хотілося, щоб друга частина рядка була жирною, і я знаю, що можу використовувати два елементи керування (мітки, текстові блоки тощо), але я вважаю за краще ні, через велику кількість елементів управління, які вже використовуються.

Відповіді:


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 підтримує такі конструкції.
Аллон Гуралнек

6
чи ця підтримка є обов'язковою?
Арсен Мкртчян

11
@ArsenMkrt Як щодо: <TextBlock FontWeight = "Жирний" Text = "{
Обв'язуючий

2
@Aetherix Я не міг так працювати. Я використовував це з qqbenq: <TextBlock> Щомісячне погашення <Bold> £ </Bold> <Run FontWeight = "Bold" Text = "{Binding MonthlyPayment}" /> </TextBlock>
Gail Foad

49

Існують різні 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може, але ви можете легко прив’язати змінну до властивості Runs 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.");

44

Ознайомтеся з цим прикладом із застосування програми Charles Petzolds Bool = Код + розмітка

//----------------------------------------------
// 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 показує базове форматування з Жирним Itallic і підкресленим текстом.

Далі включає метод 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 показує функцію прольоту та різні можливості з нею.

Для детального пояснення перевірте сайт!

Приклади


Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться. - З огляду
Річард Слейтер

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>

Я навчаюсь ... тому, якщо хтось має талант щодо вищевказаного рішення, будь ласка, поділіться! :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.