Элементы управления в WPF. Работа с текстом

Работа с текстом в WPF может строится на использовании целого ряд элементов управления, предназначенных как для простого отображения текстового содержимого, так и для его редактирования. С некоторыми из этих элементов мы уже прямо или косвенно познакомились, когда изучали работу с текстом и шрифтами в WPF. В этой части мы рассмотрим основные свойства и события элементов управления, предназначенных для ввода и вывода текстового содержимого в WPF.

Работа с текстом в WPF

Вывод текста: элементы TextBlock, Label и AccessText

Элемент TextBlock

Элемент TextBlock предназначен для вывода текстового содержимого. Этот элемент WPF содержит достаточно много различных свойств для гибкого управления оформлением текста — размеры шрифта, семейство шрифтов и так далее. С большинством из этих свойств мы подробно знакомились при изучении работы в WPF с текстом и шрифтами. При этом, внутри текста у TextBlock мы можем использовать специальные элементы содержимого для изменения стилей начертания отдельных частей текста, ручного переноса строк и так далее. Рассмотрим следующий пример:

<TextBlock FontSize="20" 
           Width="600" 
           TextWrapping="WrapWithOverflow">
    <Bold>Это</Bold> <Italic>тектовый блок</Italic>, <LineBreak/> содержащий большой объем текста с разделителями,<LineBreak/> который не умещается во всю ширину окна, и может переноситься на другую строку. Также здесь включен перенос слов, например, посмотрим как будет переноситься слово достопримечательность 
</TextBlock>

Обратите внимание на содержимое текстового блока — здесь мы используем специальные элементы WPF для оформления текста:

  • <Bold> — делает участок текста жирным
  • <Italic> — участок текста пишется курсивом
  • <LineBreak/> — устанавливает перенос текста на новую строку

В результате, мы увидим следующее содержимое текстового блока:Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox Более того, мы можем оформлять текст, используя специальный элемент Run, позволяющий форматировать текст блока. Например:

<TextBlock FontSize="20" 
           Width="600" 
           TextWrapping="WrapWithOverflow">
    H<Run Typography.Variants="Subscript">2</Run>O - формула воды<LineBreak/>
    м/с<Run Typography.Variants="Superscript">2</Run> - размерность ускорения <LineBreak/>
</TextBlock>

Здесь мы используем элемент Run для форматирования текста — установки верхних и нижних индексов:Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox

Элемент Label

Этот элемент также используется для вывода текста, но если элемент TextBlock предназначен для вывода текста, то Label представляет собой текстовую подпись для элемента управления и, при этом, обеспечивает поддержку клавиш доступа. Поддержка мнемонических команд — это основная особенность Label. Чтобы продемонстрировать смысл мнемоники, напишем следующий пример:

<StackPanel>
    <Label Target="{Binding ElementName=button}">_Select</Label>
    <Button Click="button_Click" Content="Кнопка" x:Name="button" Width="100" Height="50" />
</StackPanel>

Обработчик события Click кнопки будет следующим:

private void button_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Кнопка нажата");
}

Обратите внимание на текст метки Label — здесь мы используем символ нижнего подчеркивания:

<Label Target="{Binding ElementName=button}">_Select</Label>

первый символ подчеркивания и следующий символ за ним определяются как клавиша доступа. Также, мы определили атрибут Target в котором, используя расширение разметки Binding указали цель — элемент на который будет переведен фокус ввода при выполнении мнемонической команды. Этим элементом управления будет кнопка. Теперь запустим приложение:

Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox

Нажмите клавишу s на клавиатуре и убедитесь, что сработало событие Click кнопки:

Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox

По умолчанию, мы не видим доступные нам мнемонические команды в интерфейсе. Чтобы их увидеть — нажмите клавишу Alt:Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox

Использование клавиш доступа также реализовано в другом элементе управления в WPF — AccessText.

Элемент AccessText

Элемент AccessText также представляет собой клавишу доступа и может применяться, например, в других элементах управления WPF. Рассмотрим следующий пример:

<StackPanel>
    <Button  Click="button_Click" Width="100" Height="50" >
        <AccessText>_Нажми меня</AccessText>
    </Button>
</StackPanel>

Теперь клавиша н будет выступать клавишей доступа для кнопки. Напустите приложение и нажмите н — сработает событие Click кнопки.

Ввод текста: элементы TextBox, PasswordBox, RichTextBox

Элемент TextBox

Если элемент TextBlock предназначен для вывода статического текста, то TextBox позволяет текст редактировать. Обычно, элемент TextBox используется для ввода небольших объемов неформатированного текста, например, в качестве полей ввода имени пользователя, email, номера телефона и так далее. Например, создадим TextBox для ввода имени пользователя:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="120"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="25"/>
    </Grid.RowDefinitions>
    
    <Label Grid.Row="0" Grid.Column="0" Target="{Binding ElementName=userName}" Content="_Имя пользователя"/>
    <TextBox Grid.Row="0" Grid.Column="1" x:Name="userName" Text="Введите имя пользователя" />
</Grid>

В запущенном приложении это поле и метка будут выглядеть следующим образом:Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox Среди свойств TextBox, помимо свойств для работы с текстом и шрифтами, стоит отметить следующие свойства:

Свойство Тип Описание
CaretIndex int Отсчитываемая от нуля позиция курсора
MaxLength int Максимальное количество символов, которые можно ввести в TextBox
MaxLines int Максимальное количество видимых строк
MinLines int Минимальное количество видимых строк
SelectedText string Выделенный текст
SelectionLength int Длина выделенной строки
SelectionStart int Индекс символа с которого начинается выделенный текст

Также TextBox предоставляет нам два события:

Событие Описание
public event System.Windows.RoutedEventHandler SelectionChanged;
Генерируется при изменении выделенного текста
public event System.Windows.Controls.TextChangedEventHandler TextChanged;
Генерируется при изменении текстового содержимого

Воспользуемся этими свойствами и событиями в нашем примере:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="120"/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="25"/>
        <RowDefinition Height="25"/>
        <RowDefinition Height="25"/>
    </Grid.RowDefinitions>
    
    <Label Grid.Row="0" Grid.Column="0" Target="{Binding ElementName=userName}" Content="_Имя пользователя"/>
    <TextBox Grid.Row="0" Grid.Column="1" 
             x:Name="userName" 
             Text="Введите имя пользователя" 
             TextChanged="userName_TextChanged"
             SelectionChanged="userName_SelectionChanged"/>
    <TextBlock x:Name="text" Grid.Column="1" Grid.Row="1"/>
    <TextBlock x:Name="selected_text" Grid.Column="1" Grid.Row="2"/>
</Grid>

Здесь мы добавили два элемента TextBlock, а также события TextBoxTextChanged и SelectionChanged, обработчики которых выглядят следующим образом:

private void userName_TextChanged(object sender, TextChangedEventArgs e)
{
    if (text != null)
       text.Text = userName.Text;
}

private void userName_SelectionChanged(object sender, RoutedEventArgs e)
{
    if (selected_text != null)
       selected_text.Text = userName.SelectedText;
}

Запустим приложение и проверим результат:

Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox Ещё одной замечательной возможностью TextBox является проверка орфографии. Для этого мы должны воспользоваться присоединенным свойством и установить язык. Например так:

<TextBox ....
         Language="ru-RU" SpellCheck.IsEnabled="True"/>

Теперь будет проводиться проверка орфографии для русского языка:

Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox

Доступ к редактированию слова осуществляется через контекстное меню, которое открывается кликом правой кнопкой мыши по полю TextBox.

Элемент PasswordBox

Элемент PasswordBox предназначен для ввода текстовой информации, которая должна визуально скрываться от пользователя, например, для ввода паролей. Все вводимые символы заменяются маской. Например,

<PasswordBox Grid.Row="0" Grid.Column="1" 
         x:Name="userPass" 
         Password="123456789"/>

В свойстве Password храниться текущее значение введенное в PasswordBox. По умолчанию, все символы в этом текстовом поле заменяются на жирные точки:Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox Но, при желании, мы можем заменить маску на любой другой символ:

<PasswordBox Grid.Row="0" Grid.Column="1" 
         x:Name="userPass" 
         Password="123456789"
         PasswordChar="*"/>

Теперь все символы будут заменены на «звездочки»

Работа с текстом в WPF и C#: элементы управления TextBlock. Label, AccessText, TextBox, PasswordBox, RichTextBox

Аналогично TextBox, для отслеживания изменений в PasswordBox используется событие:

public event System.Windows.RoutedEventHandler PasswordChanged;

Элемент RichTextBox

Элемент RichTextBox можно назвать текстовым полем с расширенными возможностями. Если вам необходимо обеспечить в приложении не только ввод текста, но и формирование полноценных документов с картинками, параграфами и т.д., то вам необходимо задействовать в приложении именно этот элемент управления. Про этот элемент управления в WPF мы подробно поговорим в отдельной главе руководства.

Итого

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

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии