Блок текста

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

Выбор правильного элемента управления

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

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

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

UWP и WinUI 2

Важно!

Сведения и примеры в этой статье оптимизированы для приложений, использующих Windows App SDK и WinUI 3, но обычно применимы к приложениям UWP, использующим WinUI 2. Сведения и примеры для конкретной платформы см. в справочнике по API UWP.

В этом разделе содержатся сведения, необходимые для использования элемента управления в приложении UWP или WinUI 2.

API для этого элемента управления существуют в пространстве имен Windows.UI.Xaml.Controls .

Мы рекомендуем использовать последнюю версию WinUI 2 , чтобы получить самые актуальные стили, шаблоны и функции для всех элементов управления.

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

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

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

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

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

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

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

Вы также можете добавить содержимое, поместив в свойство TextBox.Inlines элементы встроенного подвижного содержимого следующим образом.

<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, обеспечивают разное форматирование для разных частей текста. Дополнительные сведения см. в разделе Форматирование текста. Строковый элемент Hyperlink позволяет вам добавлять гиперссылку в свой текст. Однако, при использовании элементов Inlines также отключается отрисовка текста с помощью быстрого пути, что рассматривается в следующем разделе.

Рекомендации по производительности

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

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

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

Примечание До Windows 10 версии 1607 дополнительные свойства также влияют на быстрый путь. При запуске приложения в более ранней версии Windows эти условия также приведут к обработке текста по медленному пути. См. сведения о версиях в статье Адаптивный к версии код.

  • Typography: быстрому пути соответствуют только значения по умолчанию для различных свойств Typography.
  • LineStackingStrategy: если для параметра LineHeight не установлено значение 0, значения BaselineToBaseline и MaxHeight отключают быстрый путь.
  • IsTextSelectionEnabled: Оптимальный маршрут задает только значение false. Если задать для этого свойства значение true, быстрый путь будет выключен.

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

Совет Эта функция подробно описана в этом сеансе из статьи Build 2015— XAML Performance: Techniques for Maximizing Universal App Experiences Built with XAML (Производительность XAML 2015 г.: методы максимизации возможностей универсальных приложений для Windows, созданных с помощью XAML).

В общем случае необходимо задавать параметры отладки в методе 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 хранит обычный текст, к элементу управления TextBlock можно применять различные параметры форматирования для настройки отрисовки текста в приложении. Можно задать стандартные свойства элемента управления, например FontFamily, FontSize, FontStyle, Foreground и CharacterSpacing, чтобы изменить внешний вид текста. Для форматирования текста также можно использовать строковые текстовые элементы и вложенные свойства Typography. Эти параметры влияют только на то, как TextBlock отображает текст локально, поэтому если, например, скопировать и вставить текст в элемент управления для форматированного текста, форматирование не будет применено.

Примечание

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

Строковые элементы

Пространство имен Microsoft.UI.Xaml.Documents предоставляет различные встроенные текстовые элементы, которые можно использовать для форматирования текста, например Полужирный, Курсив, 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>

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

Текст, отформатированный с помощью запущенных элементов

Шрифтовое оформление

Вложенные свойства класса Typography предоставляют доступ к набору типографских свойств Microsoft OpenType. Эти присоединенные свойства можно задать либо в объекте 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>

Получение примера кода