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

на главную

Жанры

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

На заметку! Элементы управления Ink API не совместимы с визуальным конструктором XAML в версии Visual Studio 16.8.3 (текущая версия на момент написания главы) или Visual Studio 16.9 Preview 2. Использовать элементы управления можно, но только не через визуальный конструктор.

Элемент управления InkCanvas

Простое добавление

InkCanvas
делает возможным рисование в окне. Рисовать можно с помощью
мыши либо, если есть устройство, воспринимающее касания, то пальца или цифрового пера. Запустите приложение и нарисуйте что-нибудь (рис. 25.19).

Элемент управления

InkCanvas
обеспечивает нечто большее, чем просто рисование штрихов с помощью мыши (или пера); он также поддерживает несколько уникальных режимов редактирования, управляемых свойством
EditingMode
, которому можно присвоить любое значение из связанного перечисления
InkCanvasEditingMode
. В данном примере вас интересует режим
Ink
, принятый по умолчанию, который только что демонстрировался, режим
Select
, позволяющий пользователю выбирать с помощью мыши область для перемещения или изменения размера, и режим
EraseByStroke
, который удаляет предыдущий штрих мыши.

На заметку! Штрих — это визуализация, которая происходит во время одиночной операции нажатия и отпускания кнопки мыши. Элемент управления

InkCanvas
сохраняет все штрихи в объекте
StrokeCollection
, который доступен с применением свойства
Strokes
.

Обновите обработчик

RadioButtonClicked
следующей логикой, которая помещает
InkCanvas
в нужный режим в зависимости от выбранного переключателя
RadioButton
:

private void RadioButtonClicked(object sender,RoutedEventArgs e)

{

// В зависимости от того, какая кнопка отправила событие,

// поместить InkCanvas в нужный режим оперирования.

this.MyInkCanvas.EditingMode =

(sender as RadioButton)?.Content.ToString switch

{

// Эти строки должны совпадать со значениями свойства Content

// каждого элемента RadioButton.

"Ink Mode!" => InkCanvasEditingMode.Ink,

"Erase Mode!" => InkCanvasEditingMode.EraseByStroke,

"Select Mode!" => InkCanvasEditingMode.Select,

_ => this.MyInkCanvas.EditingMode

};

}

Вдобавок установите

Ink
как стандартный режим в конструкторе окна. Там же установите стандартный выбор для
ComboBox
(элемент управления
ComboBox
более подробно рассматривается в следующем разделе):

public MainWindow

{

this.InitializeComponent;

// Установить режим Ink в качестве стандартного.

this.MyInkCanvas.EditingMode = InkCanvasEditingMode.Ink;

this.inkRadio.IsChecked = true;

this.comboColors.SelectedIndex = 0;

}

Теперь

запустите программу еще раз, нажав <F5>. Войдите в режим
Ink
и нарисуйте что-нибудь. Затем перейдите в режим
Erase
и сотрите ранее нарисованное (курсор мыши автоматически примет вид стирающей резинки). Наконец, переключитесь в режим
Select
и выберите несколько линий, используя мышь в качестве лассо.

Охватив элемент, его можно перемещать по поверхности холста, а также изменять размеры. На рис. 25.20 демонстрируются разные режимы в действии.

Элемент управления ComboBox

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

ComboBox
(или
ListBox
) есть три способа определения выбранного в них элемента. Во-первых, когда необходимо найти числовой индекс выбранного элемента, должно применяться свойство
SelectedIndex
(отсчет начинается с нуля; значение
– 1
представляет отсутствие выбора). Во-вторых, если требуется получить объект, выбранный внутри списка, то подойдет свойство
SelectedItem
. В-третьих, свойство
SelectedValue
позволяет получить значение выбранного объекта (обычно с помощью вызова
ToString
).

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

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>

Поделиться:
Популярные книги

Бастард Императора

Орлов Андрей Юрьевич
1. Бастард Императора
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Бастард Императора

На границе империй. Том 10. Часть 1

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 1

Имя нам Легион. Том 7

Дорничев Дмитрий
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 7

Измена. Вторая жена мужа

Караева Алсу
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Вторая жена мужа

Буря империи

Сай Ярослав
6. Медорфенов
Фантастика:
аниме
фэнтези
фантастика: прочее
эпическая фантастика
5.00
рейтинг книги
Буря империи

Пенсия для морского дьявола

Чиркунов Игорь
1. Первый в касте бездны
Фантастика:
попаданцы
5.29
рейтинг книги
Пенсия для морского дьявола

На изломе чувств

Юнина Наталья
Любовные романы:
современные любовные романы
6.83
рейтинг книги
На изломе чувств

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Сирота

Шмаков Алексей Семенович
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Сирота

Законы Рода. Том 9

Flow Ascold
9. Граф Берестьев
Фантастика:
городское фэнтези
попаданцы
аниме
дорама
фэнтези
фантастика: прочее
5.00
рейтинг книги
Законы Рода. Том 9

Красноармеец

Поселягин Владимир Геннадьевич
1. Красноармеец
Фантастика:
боевая фантастика
попаданцы
4.60
рейтинг книги
Красноармеец

Огненный князь 4

Машуков Тимур
4. Багряный восход
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 4

Начальник милиции. Книга 5

Дамиров Рафаэль
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 5

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор