Элемент управления 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 =