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

    <Label FontSize ="20" HorizontalAlignment="Center"

        VerticalAlignment="Center" Content="Blue"/>

  </StackPanel>

</ComboBox>

В определении каждого элемента

StackPanel
выполняется присваивание значения свойству
Tag
, что является быстрым и удобным способом выявления, какой стек элементов был выбран пользователем (для этого существуют и лучшие способы, но пока достаточно такого). С указанной поправкой необходимо изменить реализацию метода
ColorChanged()
:

private void ColorChanged(object sender, SelectionChangedEventArgs e)

{

<b>  // Получить свойство Tag выбранного элемента StackPanel.</b>

  string colorToUse = (this.comboColors.SelectedItem

      as StackPanel).Tag.ToString();

  ...

}

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

ComboBox
будет выглядеть так, как показано на рис. 25.21.

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

Сохранение, загрузка и очистка данных InkCanvas

Последняя часть вкладки

Ink API
позволит сохранять и загружать данные контейнера
InkCanvas
, а также очищать его содержимое, добавляя обработчики событий для кнопок в панели инструментов. Модифицируйте разметку XAML для кнопок за счет добавления разметки, отвечающей за события щелчков:

&lt;Button Grid.Column=&quot;0&quot; x:Name=&quot;btnSave&quot; Margin=&quot;10,10&quot;

    Width=&quot;70&quot; Content=&quot;Save Data&quot;
Click=&quot;SaveData&quot;/&gt;

&lt;Button Grid.Column=&quot;1&quot; x:Name=&quot;btnLoad&quot; Margin=&quot;10,10&quot;

    Width=&quot;70&quot; Content=&quot;Load Data&quot;
Click=&quot;LoadData&quot;/&gt;

&lt;Button Grid.Column=&quot;2&quot; x:Name=&quot;btnClear&quot; Margin=&quot;10,10&quot;

    Width=&quot;70&quot; Content=&quot;Clear&quot;
Click=&quot;Clear&quot;/&gt;

Импортируйте пространства имен

System.IO
и
System.Windows.Ink
в файл кода. Реализуйте обработчики событий следующим образом:

private void SaveData(object sender, RoutedEventArgs e)

{

<b>  // Сохранить все данные InkCanvas в локальном файле.</b>

  using (FileStream fs = new FileStream(&quot;StrokeData.bin&quot;, FileMode.Create))

  this.MyInkCanvas.Strokes.Save(fs);

  fs.Close();

  MessageBox.Show(&quot;Image Saved&quot;,&quot;Saved&quot;);

}

private void LoadData(object sender, RoutedEventArgs e)

{

<b>  // Наполнить StrokeCollection из файла.</b>

  using(FileStream fs = new FileStream(&quot;StrokeData.bin&quot;,

    FileMode.Open, FileAccess.Read))

  StrokeCollection strokes = new StrokeCollection(fs);

  this.MyInkCanvas.Strokes = strokes;

}

private void Clear(object sender, RoutedEventArgs e)

{

<b>  // Очистить все штрихи.</b>

  this.MyInkCanvas.Strokes.Clear();

}

Теперь должна появиться возможность сохранения данных в файле, их загрузки из файла и очистки

InkCanvas
от всех данных. Таким образом, работа с первой вкладкой элемента управления
TabControl
завершена, равно как и исследование интерфейса Ink API. Конечно, о технологии Ink API можно рассказать еще много чего, но теперь вы должны обладать достаточными знаниями, чтобы продолжить изучение темы самостоятельно. Далее вы узнаете, как применять привязку данных WPF.

Введение в модель привязки данных WPF

Элементы управления часто служат целью для разнообразных операций привязки данных. Выражаясь просто, привязка данных представляет собой действие по подключению свойств элемента управления к значениям данных, которые могут изменяться на протяжении жизненного цикла приложения. Это позволяет элементу пользовательского интерфейса отображать состояние переменной в коде. Например, привязку данных можно использовать для решения следующих задач:

• отмечать флажок элемента управления

Checkbox
на основе булевского свойства заданного объекта:

• отображать в элементах

TextBox
информацию, извлеченную из реляционной базы данных:

• подключать элемент

Label
к целому числу, представляющему количество файлов в папке.

При работе со встроенным механизмом привязки данных WPF важно помнить о разнице между источником и местом назначения операции привязки. Как и можно было ожидать, источником операции привязки данных являются сами данные (булевское свойство, реляционные данные и т.д.), а местом назначения (или целью) — свойство элемента управления пользовательского интерфейса, в котором задействуется содержимое данных (вроде свойства элемента управления

CheckBox
или
TextBox
).

В дополнение к привязке традиционных данных инфраструктура WPF делает возможной привязку элементов, как было продемонстрировано в предшествующих примерах. Это значит, что можно привязать (скажем) видимость свойства к свойству состояния отметки флажка. Такое действие было определенно возможным в Windows Forms, но требовало реализации через код. Инфраструктура WPF предлагает развитую экосистему привязки данных, которая способна почти целиком поддерживаться в разметке. Она также позволяет обеспечивать синхронизацию источника и цели в случае изменения значений данных.

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