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

на главную

Жанры

Язык программирования 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>

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

Я все еще граф. Книга IX

Дрейк Сириус
9. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я все еще граф. Книга IX

Кодекс Крови. Книга VIII

Борзых М.
8. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VIII

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

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

Ученичество. Книга 1

Понарошку Евгений
1. Государственный маг
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ученичество. Книга 1

Деспот

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Деспот

Инцел на службе демоницы 1 и 2: Секса будет много

Блум М.
Инцел на службе демоницы
Фантастика:
фэнтези
5.25
рейтинг книги
Инцел на службе демоницы 1 и 2: Секса будет много

Тринадцатый

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

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Чехов. Книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
альтернативная история
5.00
рейтинг книги
Чехов. Книга 3

Изменить нельзя простить

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Изменить нельзя простить

Сирота

Ланцов Михаил Алексеевич
1. Помещик
Фантастика:
альтернативная история
5.71
рейтинг книги
Сирота

Делегат

Астахов Евгений Евгеньевич
6. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Делегат

Эйгор. В потёмках

Кронос Александр
1. Эйгор
Фантастика:
боевая фантастика
7.00
рейтинг книги
Эйгор. В потёмках

Наследник с Меткой Охотника

Тарс Элиан
1. Десять Принцев Российской Империи
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Наследник с Меткой Охотника