Вдобавок установите 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 демонстрируются разные режимы в действии.

<p id="AutBody_Root1155"><strong>Элемент управления ComboBox</strong></p>

После заполнения элемента управления 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.

Перейти на страницу:

Похожие книги