Создайте приложение 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;