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