Литмир - Электронная Библиотека
A
A

  this.inkRadio.IsChecked = true;

  this.comboColors.SelectedIndex = 0;

}

Теперь запустите программу еще раз, нажав <F5>. Войдите в режим

Ink
и нарисуйте что-нибудь. Затем перейдите в режим
Erase
и сотрите ранее нарисованное (курсор мыши автоматически примет вид стирающей резинки). Наконец, переключитесь в режим
Select
и выберите несколько линий, используя мышь в качестве лассо.

Охватив элемент, его можно перемещать по поверхности холста, а также изменять размеры. На рис. 25.20 демонстрируются разные режимы в действии.

Язык программирования C#9 и платформа .NET5 - _218.png

Элемент управления ComboBox

После заполнения элемента управления

ComboBox
(или
ListBox
) есть три способа определения выбранного в них элемента. Во-первых, когда необходимо найти числовой индекс выбранного элемента, должно применяться свойство
SelectedIndex
(отсчет начинается с нуля; значение
-1
представляет отсутствие выбора). Во-вторых, если требуется получить объект, выбранный внутри списка, то подойдет свойство
SelectedItem
. В-третьих, свойство
SelectedValue
позволяет получить значение выбранного объекта (обычно с помощью вызова
ToString()
).

Последний фрагмент кода, который понадобится добавить для данной вкладки, отвечает за изменение цвета штрихов, нарисованных в

InkCanvas
. Свойство
DefaultDrawingAttributes
элемента
InkCanvas
возвращает объект
DrawingAttributes
, который позволяет конфигурировать многочисленные аспекты пера, включая его размер и цвет (помимо других настроек). Модифицируйте код C# следующей реализацией метода
ColorChanged()
:

private void ColorChanged(object sender, SelectionChangedEventArgs e)

{

<b>  // Получить выбранный элемент в раскрывающемся списке.</b>

  string colorToUse =

    (this.comboColors.SelectedItem as ComboBoxItem)?.Content.ToString();

<b>  // Изменить цвет, используемый для визуализации штрихов.</b>

  this.MyInkCanvas.DefaultDrawingAttributes.Color =

    (Color)ColorConverter.ConvertFromString(colorToUse);

}

Вспомните, что

ComboBox
содержит коллекцию
ComboBoxIterns
. В сгенерированной разметке XAML присутствует такое определение:

&lt;ComboBox x:Name=&quot;comboColors&quot; Width=&quot;100&quot; SelectionChanged=&quot;ColorChanged&quot;&gt;

  &lt;ComboBoxItem Content=&quot;Red&quot;/&gt;

  &lt;ComboBoxItem Content=&quot;Green&quot;/&gt;

  &lt;ComboBoxItem Content=&quot;Blue&quot;/&gt;

&lt;/ComboBox&gt;

В результате обращения к свойству

SelectedItem
получается выбранный элемент
ComboBoxItem
, который хранится как экземпляр общего типа
Object
. После приведения
Object
к
ComboBoxItem
извлекается значение
Content
, которое будет строкой
Red
,
Green
или
Blue
. Эта строка затем преобразуется в объект
Color
с применением удобного служебного класса
ColorConverter
. Снова запустите программу. Теперь должна появиться возможность переключения между цветами при визуализации изображения.

Обратите внимание, что элементы управления

ComboBox
и
ListBox
также могут иметь сложное содержимое, а не только список текстовых данных. Чтобы получить представление о некоторых возможностях, откройте редактор XAML для окна и измените определение элемента управления
ComboBox
, поместив в него набор элементов
StackPanel
, каждый из которых содержит
Ellipse
и
Label
(свойство
Width
элемента
ComboBox
установлено в
175
):

&lt;ComboBox x:Name=&quot;comboColors&quot; Width=&quot;175&quot; Margin=&quot;10,0,0,0&quot;

    SelectionChanged=&quot;ColorChanged&quot;&gt;

  &lt;StackPanel Orientation =&quot;Horizontal&quot; Tag=&quot;Red&quot;&gt;

    &lt;Ellipse Fill =&quot;Red&quot; Height =&quot;50&quot; Width =&quot;50&quot;/&gt;

    &lt;Label FontSize =&quot;20&quot; HorizontalAlignment=&quot;Center&quot;

        VerticalAlignment=&quot;Center&quot; Content=&quot;Red&quot;/&gt;

  &lt;/StackPanel&gt;

   &lt;StackPanel Orientation =&quot;Horizontal&quot; Tag=&quot;Green&quot;&gt;

    &lt;Ellipse Fill =&quot;Green&quot; Height =&quot;50&quot; Width =&quot;50&quot;/&gt;

    &lt;Label FontSize =&quot;20&quot; HorizontalAlignment=&quot;Center&quot;

        VerticalAlignment=&quot;Center&quot; Content=&quot;Green&quot;/&gt;

  &lt;/StackPanel&gt;

  &lt;StackPanel Orientation =&quot;Horizontal&quot; Tag=&quot;Blue&quot;&gt;

    &lt;Ellipse Fill =&quot;Blue&quot; Height =&quot;50&quot; Width =&quot;50&quot;/&gt;

509
{"b":"847442","o":1}