Вдобавок установите 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 присутствует такое определение:
В результате обращения к свойству SelectedItem
получается выбранный элемент ComboBoxItem
, который хранится как экземпляр общего типа Object
. После приведения Object
к ComboBoxItem
извлекается значение Content
, которое будет строкой Red
, Green
или Blue
. Эта строка затем преобразуется в объект Color
с применением удобного служебного класса ColorConverter
. Снова запустите программу. Теперь должна появиться возможность переключения между цветами при визуализации изображения.
Обратите внимание, что элементы управления ComboBox
и ListBox
также могут иметь сложное содержимое, а не только список текстовых данных. Чтобы получить представление о некоторых возможностях, откройте редактор XAML для окна и измените определение элемента управления ComboBox
, поместив в него набор элементов StackPanel
, каждый из которых содержит Ellipse
и Label
(свойство Width
элемента ComboBox
установлено в 175
):
SelectionChanged="ColorChanged">
VerticalAlignment="Center" Content="Red"/>
VerticalAlignment="Center" Content="Green"/>
VerticalAlignment="Center" Content="Blue"/>
В определении каждого элемента StackPanel
выполняется присваивание значения свойству Tag
, что является быстрым и удобным способом выявления, какой стек элементов был выбран пользователем (для этого существуют и лучшие способы, но пока достаточно такого). С указанной поправкой необходимо изменить реализацию метода ColorChanged
:
private void ColorChanged(object sender, SelectionChangedEventArgs e)
{
// Получить свойство Tag выбранного элемента StackPanel.
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT