Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

Последний фрагмент кода, который понадобится добавить для данной вкладки, отвечает за изменение цвета штрихов, нарисованных в

InkCanvas
. Свойство
DefaultDrawingAttributes
элемента
InkCanvas
возвращает объект
DrawingAttributes
, который позволяет конфигурировать многочисленные аспекты пера, включая его размер и цвет (помимо других настроек). Модифицируйте код C# следующей реализацией метода
ColorChanged
:

private void ColorChanged(object sender, SelectionChangedEventArgs e)

{

//
Получить выбранный элемент в раскрывающемся списке.

string colorToUse =

(this.comboColors.SelectedItem as ComboBoxItem)?.Content.ToString;

// Изменить цвет, используемый для визуализации штрихов.

this.MyInkCanvas.DefaultDrawingAttributes.Color =

(Color)ColorConverter.ConvertFromString(colorToUse);

}

Вспомните, что

ComboBox
содержит коллекцию
ComboBoxIterns
. В сгенерированной разметке XAML присутствует такое определение:

<ComboBox x:Name="comboColors" Width="100" SelectionChanged="ColorChanged">

<ComboBoxItem Content="Red"/>

<ComboBoxItem Content="Green"/>

<ComboBoxItem Content="Blue"/>

</ComboBox>

В результате обращения к свойству

SelectedItem
получается выбранный элемент
ComboBoxItem
, который хранится как экземпляр общего типа
Object
. После приведения
Object
к
ComboBoxItem
извлекается значение
Content
, которое будет строкой
Red
,
Green
или
Blue
. Эта строка затем преобразуется в объект
Color
с применением удобного служебного класса
ColorConverter
. Снова запустите программу. Теперь должна появиться возможность переключения между цветами при визуализации изображения.

Обратите внимание, что элементы управления

ComboBox
и
ListBox
также могут иметь сложное содержимое, а не только список текстовых данных. Чтобы получить представление о некоторых возможностях, откройте редактор XAML для окна и измените определение элемента управления
ComboBox
, поместив в него набор элементов
StackPanel
, каждый из которых содержит
Ellipse
и
Label
(свойство
Width
элемента
ComboBox
установлено в
175
):

<ComboBox x:Name="comboColors" Width="175" Margin="10,0,0,0"

SelectionChanged="ColorChanged">

<StackPanel Orientation ="Horizontal" Tag="Red">

<Ellipse Fill ="Red" Height ="50" Width ="50"/>

<Label FontSize ="20" HorizontalAlignment="Center"

VerticalAlignment="Center" Content="Red"/>

</StackPanel>

<StackPanel Orientation ="Horizontal" Tag="Green">

<Ellipse Fill ="Green" Height ="50" Width ="50"/>

<Label FontSize ="20" HorizontalAlignment="Center"

VerticalAlignment="Center" Content="Green"/>

</StackPanel>

<StackPanel Orientation ="Horizontal" Tag="Blue">

<Ellipse Fill ="Blue" Height ="50" Width ="50"/>

<Label FontSize ="20" HorizontalAlignment="Center"

VerticalAlignment="Center" Content="Blue"/>

</StackPanel>

</ComboBox>

В

определении каждого элемента
StackPanel
выполняется присваивание значения свойству
Tag
, что является быстрым и удобным способом выявления, какой стек элементов был выбран пользователем (для этого существуют и лучшие способы, но пока достаточно такого). С указанной поправкой необходимо изменить реализацию метода
ColorChanged
:

private void ColorChanged(object sender, SelectionChangedEventArgs e)

{

// Получить свойство Tag выбранного элемента StackPanel.

string colorToUse = (this.comboColors.SelectedItem

as StackPanel).Tag.ToString;

...

}

После запуска программы элемент управления

ComboBox
будет выглядеть так, как показано на рис. 25.21.

Сохранение, загрузка и очистка данных InkCanvas

Последняя часть вкладки

Ink API
позволит сохранять и загружать данные контейнера
InkCanvas
, а также очищать его содержимое, добавляя обработчики событий для кнопок в панели инструментов. Модифицируйте разметку XAML для кнопок за счет добавления разметки, отвечающей за события щелчков:

<Button Grid.Column="0" x:Name="btnSave" Margin="10,10"

Width="70" Content="Save Data"
Click="SaveData"/>

<Button Grid.Column="1" x:Name="btnLoad" Margin="10,10"

Width="70" Content="Load Data"
Click="LoadData"/>

<Button Grid.Column="2" x:Name="btnClear" Margin="10,10"

Width="70" Content="Clear"
Click="Clear"/>

Импортируйте пространства имен

System.IO
и
System.Windows.Ink
в файл кода. Реализуйте обработчики событий следующим образом:

Поделиться с друзьями: