Лабораторная работа 3. Создание пользовательского интерфейса в WPF

 

Создайте приложение WPF. В верхней части приложения расположите элемент управления ToolBar, а в нижней элемент RichTextBox. В ToolBar поместите две кнопки, один Slider и один ComboBox. Определите код, реализующий изменение начертания текста, размер и выбор нужного шрифта.

 

Заходим в Visual Studio и создаем приложение WPF:

 

В файл MainWindow.xaml вносим следующий код(здесь namespace Laba_4A, у Вас должен быть другой):

<Window x:Class="Laba_4A.MainWindow"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

   xmlns:local="clr-namespace:Laba_4A"

   mc:Ignorable="d"

   Title="MainWindow" Height="450" Loaded="Window_Loaded">

<Grid>

   <Grid.RowDefinitions>

       <RowDefinition Height="0.2*"/>

       <RowDefinition/>

   </Grid.RowDefinitions>

 

   <ToolBar>

       <StackPanel Orientation="Horizontal">

           <Button Name="bBolt"

                   FontFamily="Gill Sans"

                   FontStretch="UltraExpanded"

                   Margin="5"

                   Content="B"

                   Min

                   FontSize="30"

                   Click="BBolt_Click"></Button>

           <Button Name="bItalics"

                   FontStyle="Italic"

                   Margin="5"

                   Content="I"

                   MinWidth="100"

                   FontSize="30"

                   Click="BItalics_Click"/>

           <Slider Name="sFontSize"

                   Minimum="1"

                   Maximum="80"

                   

                   VerticalAlignment="Center"

                   Margin="5"

                   ValueChanged="SFontSize_ValueChanged"/>

           <ComboBox Name="cbFontFamily"

                     Margin="5"

                     

                     SelectionChanged="CbFontFamily_SelectionChanged"

                     VerticalAlignment="Center"

                     FontSize="20"/>

       </StackPanel>

   </ToolBar>

 

   <RichTextBox Name="richTextBox"

                Grid.Row="1"

                Margin="5"

                   Padding="5">

           

   </RichTextBox>

</Grid>

</Window>

В первую очередь стоит обратить внимание на атрибут Loaded="Window_Loaded" в элементе Windows. При загрузке окна будет выполняться метод Window_Loaded класса MainWindow. Метод Window_Loaded будет обновлять «содержимое» нашего ComboBox (т.е. формируется список с шрифтами). Так же введена панель содержащая слайдер для изменения шрифта и кнопоки Bold и Italic. При изменении слайдера будет изменяться соответствующий обработчик: ValueChanged="SFontSize_ValueChanged". Обработчики для кнопок устанавливаются через атрибут Click. Остальные атрибуты устанавливают внешний вид элементов (VerticalAlignment, FontSize и т. п.). Элемент RichTextBox будет хранить сам текст.

Теперь рассмотрим код класса MainWindow (файл MainWindow.xaml.cs):

public partial class MainWindow: Window

{

   public MainWindow()

   {

       InitializeComponent();

   }

 

   private void Window_Loaded(object sender, RoutedEventArgs e)

   {

       foreach (System.Windows.Media.FontFamily fontFamily in Fonts.SystemFontFamilies)

       {

           cbFontFamily.Items.Add(fontFamily.Source);

       }

 

       cbFontFamily.SelectedIndex = 0;

   }

 

   private void BBolt_Click(object sender, RoutedEventArgs e)

   {

       if (richTextBox!= null)

       {

           if (richTextBox.Selection.GetPropertyValue(Run.FontWeightProperty) is FontWeight && ((FontWeight)richTextBox.Selection.GetPropertyValue(Run.FontWeightProperty)) == FontWeights.Normal)

               richTextBox.Selection.ApplyPropertyValue(Run.FontWeightProperty, FontWeights.Bold);

           else

               richTextBox.Selection.ApplyPropertyValue(Run.FontWeightProperty, FontWeights.Normal);

 

       }

   }

 

   private void BItalics_Click(object sender, RoutedEventArgs e)

   {

       if (richTextBox!= null)

       {

           if (richTextBox.Selection.GetPropertyValue(Run.FontStyleProperty) is FontStyle && ((FontStyle)richTextBox.Selection.GetPropertyValue(Run.FontStyleProperty)) == FontStyles.Normal)

               richTextBox.Selection.ApplyPropertyValue(Run.FontStyleProperty, FontStyles.Italic);

           else

               richTextBox.Selection.ApplyPropertyValue(Run.FontStyleProperty, FontStyles.Normal);

       }

   }

 

   private void SFontSize_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)

   {

       if (richTextBox!= null)

           richTextBox.Selection.ApplyPropertyValue(TextElement.FontSizeProperty, sFontSize.Value);

   }

 

   private void CbFontFamily_SelectionChanged(object sender, SelectionChangedEventArgs e)

   {

       if (richTextBox!= null && cbFontFamily.SelectedValue!= null)

           richTextBox.Selection.ApplyPropertyValue(TextElement.FontFamilyProperty, cbFontFamily.SelectedValue);

   }

}

 

В обработчике формируется список шрифтов:

   private void Window_Loaded(object sender, RoutedEventArgs e)

   {

       foreach (System.Windows.Media.FontFamily fontFamily in

                                             Fonts.SystemFontFamilies)

       {

           cbFontFamily.Items.Add(fontFamily.Source);

       }

 

       cbFontFamily.SelectedIndex = 0;

   }

 

Рассмотрим метод BBolt_Click. В нем изменяется шрифт (жирный/нежирный) у выделенного текста (richTextBox.Selection). С помощью метода GetPropertyValue мы получаем свойство(в данном случае жирность текста, т.к. в качестве аргумента было передано Run.FontWeightProperty). Чтобы изменить свойство выделенного текста требуется воспользоваться методом ApplyPropertyValue. В качестве первого параметра ApplyPropertyValue принимает изменяемое свойство(например Run.FontWeightProperty), в качестве второго указывается присваиваемое значение(например FontWeights.Normal).

Аналогично работают методы BItalics_Click и SFontSize_ValueChanged.

 

УПРАЖНЕНИЕ

Добавтье кнопку, которая будет позволять сохранить введенный в RichTextBox текст в какой-нибудь файл. Подсказка: путь к файлу можно указать с помощью OpenFileDialog. Для получения текста можно использовать следующую конструкцию:

var textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);

var str = textRange.Text;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: