Поделиться через


блок Text

Text блок является основным элементом управления для отображения текста только для чтения в приложениях. Его можно использовать для отображения однострочного или многострочного текста, встроенных гиперссылок и текста с форматированием, например полужирным, курсивом или подчеркиванием.

Это правильный контроль?

Блок текста обычно проще использовать и обеспечивает лучшую производительность отрисовки текста, чем блок форматированного текста, поэтому он предпочтителен для большинства текста пользовательского интерфейса приложения. Вы можете легко получить доступ к тексту и использовать его из текстового блока в вашем приложении, получив значение свойства Text. Он также предоставляет множество аналогичных параметров форматирования для настройки представления текста.

Хотя в текст можно поместить разрывы строк, блок текста разработан для отображения одного абзаца и не поддерживает отступ текста. Используйте RichTextBlock , если требуется поддержка нескольких абзацев, текста с несколькими столбцами или других сложных текстовых макетов или встроенных элементов пользовательского интерфейса, таких как изображения.

Дополнительные сведения о выборе правильного элемента управления текстом см. в Text статье об элементах управления .

Создание текстового блока

Значок коллекции WinUI 3 Приложение WinUI 3 Gallery содержит интерактивные примеры элементов управления и функций WinUI. Получите приложение из Microsoft Store или просмотрите исходный код GitHub.

Вот как определить простой элемент управления TextBlock и задать для свойства Text строку.

<TextBlock Text="Hello, world!" />
TextBlock textBlock1 = new TextBlock();
textBlock1.Text = "Hello, world!";

Модель содержимого

Существует два свойства, которые можно использовать для добавления содержимого в TextBlock: Text и Inlines.

Наиболее распространенным способом отображения текста является установка свойства Text строковым значением, как показано в предыдущем примере.

Вы также можете добавить содержимое, разместив встроенные элементы содержимого потока в свойстве Inlines, как показано ниже. (Inlines — это свойство содержимого по умолчанию TextBlock, поэтому не нужно явно добавлять его в XAML.)

<TextBlock>Text can be <Bold>bold</Bold>, <Underline>underlined</Underline>, 
    <Italic>italic</Italic>, or a <Bold><Italic>combination</Italic></Bold>.</TextBlock>

Элементы, производные от класса Inline, такие как Bold, Italic, Run, Spanи LineBreak, обеспечивают разное форматирование для разных частей текста. Дополнительные сведения см. в разделе "Форматирование текста ". Встроенный элемент Гиперссылки позволяет добавить гиперссылку в текст. Однако использование Inlines также отключает быстрый рендеринг текста, который рассматривается в следующем разделе.

Вопросы, связанные с производительностью

По возможности XAML использует более эффективное направление кода для разметки текста. Этот быстрый путь снижает общее использование памяти и значительно сокращает время процессора для измерения и упорядочения текста. Этот быстрый путь применяется только к TextBlock, поэтому его следует предпочесть, если возможно, вместо RichTextBlock.

Для некоторых условий требуется, чтобы TextBlock возвращался к более полнофункциональному и ресурсоемкому коду для рендеринга текста. Чтобы сохранить отрисовку текста в режиме ускоренной обработки, обязательно следуйте этим рекомендациям при настройке свойств, указанных здесь.

  • Text. Самое важное условие заключается в том, что быстрый путь используется только при явном задании текста путем явного задания свойства Text в XAML или коде (как показано в предыдущих примерах). Настройка текста с помощью коллекции TextBlockInlines(например, <TextBlock>Inline text</TextBlock>) отключит быстрый путь из-за потенциальной сложности нескольких форматов.
  • CharacterSpacing: только значение по умолчанию 0 — это ускоренный путь.
  • TextTrimming: только значения Noneи CharacterEllipsisWordEllipsis значения являются быстрым путем. Значение Clip отключает быстрый путь.

Свойство DebugSettings.IsTextPerformanceVisualizationEnabledtrue можно задать во время отладки, чтобы определить, используется ли текст с быстрой отрисовкой пути. Если для этого свойства задано значение true, текст на быстром пути отображается в ярко-зеленом цвете.

Обычно параметры отладки задаются переопределением метода OnLaunched на странице программной части для App.xaml, как это делается.

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
#if DEBUG
    if (System.Diagnostics.Debugger.IsAttached)
    {
        this.DebugSettings.IsTextPerformanceVisualizationEnabled = true;
    }
#endif

// ...

}

В этом примере первый TextBlock обрабатывается с использованием быстрого способа, а второй — нет.

<StackPanel>
    <TextBlock Text="This text is on the fast path."/>
    <TextBlock>This text is NOT on the fast path.</TextBlock>
<StackPanel/>

При запуске этого XAML в режиме отладки с параметром IsTextPerformanceVisualizationEnabled значение true, результат выглядит следующим образом.

Text отрисовано в режиме отладки

Caution

Цвет текста, который не находится на быстром пути, не изменяется. Если в приложении есть текст с цветом, указанным как ярко-зеленый, он по-прежнему отображается в ярко-зеленом цвете, когда он находится на более медленном пути отрисовки. Будьте осторожны, чтобы не путать текст, который отображается зелёным цветом в приложении, с текстом, который находится на быстром пути и зелёным по причине параметров отладки.

Форматирование текста

Хотя свойство Text хранит обычный текст, вы можете применить различные параметры форматирования к элементу управления TextBlock, чтобы настроить отображение текста в приложении. Вы можете задать стандартные свойства элемента управления, такие как FontFamily, FontSize, FontStyle, Foreground и CharacterSpacing , чтобы изменить внешний вид текста. Вы также можете использовать встроенные текстовые элементы и вложенные свойства typeography для форматирования текста. Эти параметры влияют только на то, как TextBlock отображает текст локально, поэтому при копировании и вставки текста в элемент управления форматированным текстом, например, форматирование не применяется.

Замечание

Помните, что, как отмечалось в предыдущем разделе, встроенные текстовые элементы и значения типографии, отличные от стандартного значения, не отображаются на быстром пути.

элементы Inline

Пространство имен Microsoft.UI.Xaml.Documents предоставляет множество встроенных текстовых элементов, которые можно использовать для форматирования текста, например Bold, Italic, Run, Spanи LineBreak.

Вы можете отобразить ряд строк в TextBlock, где каждая строка имеет разные форматирования. Это можно сделать с помощью элемента Run для отображения каждой строки с его форматированием и разделив каждый элемент Run с элементом LineBreak.

Вот как определить несколько отформатированных текстовых строк в TextBlock с помощью объектов Run, разделенных LineBreak.

<TextBlock FontFamily="Segoe UI" Width="400" Text="Sample text formatting runs">
    <LineBreak/>
    <Run Foreground="Gray" FontFamily="Segoe UI Light" FontSize="24">
        Segoe UI Light 24
    </Run>
    <LineBreak/>
    <Run Foreground="Teal" FontFamily="Georgia" FontSize="18" FontStyle="Italic">
        Georgia Italic 18
    </Run>
    <LineBreak/>
    <Run Foreground="Black" FontFamily="Arial" FontSize="14" FontWeight="Bold">
        Arial Bold 14
    </Run>
</TextBlock>

Вот результат.

Text форматирование с элементами запуска

Typography

Присоединенные свойства класса Typography предоставляют доступ к набору свойств Microsoft OpenType Typography. Эти присоединённые свойства можно задать в TextBlockили на отдельных элементах встроенного текста. В этих примерах показаны оба.

<TextBlock Text="Hello, world!"
           Typography.Capitals="SmallCaps"
           Typography.StylisticSet4="True"/>
TextBlock textBlock1 = new TextBlock();
textBlock1.Text = "Hello, world!";
Typography.SetCapitals(textBlock1, FontCapitals.SmallCaps);
Typography.SetStylisticSet4(textBlock1, true);
<TextBlock>12 x <Run Typography.Fraction="Slashed">1/3</Run> = 4.</TextBlock>