Прежде чем перейти к теме объектных ресурсов, давайте кратко проанализируем, как упаковывать BinaryResourcesApp
. Модифицируйте разметку начального окна для обработки события Loaded
элемента Window и применения DockPanel
в качестве корня компоновки:
Title="Fun with Binary Resources" Height="500" Width="649"
Loaded="MainWindow_OnLoaded">
Предположим, что приложение должно отображать внутри части окна один из трех файлов изображений, основываясь на пользовательском вводе. Элемент управления Image
из WPF может использоваться для отображения не только типичного файла изображения (*.bmp
, *.gif
, *.ico
, *.jpg
, *.png
, *.wdp
или *.tiff
), но также данных объекта DrawingImage
(как было показано в главе 26). Можете построить пользовательский интерфейс окна, который поддерживает диспетчер компоновки DockPanel
, содержащий простую панель инструментов с кнопками Next (Вперед) и Previous (Назад). Ниже панели инструментов расположите элемент управления Image
, свойство Source
которого в текущий момент не установлено:
Margin="5" Content="Previous" Click="btnPreviousImage_Click"/>
Margin="5" Content="Next" Click="btnNextImage_Click"/>
Добавьте следующие пустые обработчики событий:
private void MainWindow_OnLoaded(
object sender, RoutedEventArgs e)
{
}
private void btnPreviousImage_Click(
object sender, RoutedEventArgs e)
{
}
private void btnNextImage_Click(
object sender, RoutedEventArgs e)
{
}
Во время загрузки окна изображения добавляются в коллекцию, по которой будет совершаться проход с помощью кнопок Next и Previous. Располагая инфраструктурой приложения, можно заняться исследованием разных вариантов ее реализации.
Один из вариантов предусматривает поставку файлов изображений в виде набора несвязанных файлов в каком-то подкаталоге внутри пути установки приложения. Начните с создания в проекте новой папки (по имени Images
). Добавьте в папку несколько изображений, щелкнув правой кнопкой мыши внутри данной папки и выбрав в контекстном меню пункт Add►Existing Item (Добавить►Существующий элемент). В открывшемся диалоговом окне Add Existing Item (Добавление существующего элемента) измените фильтр файлов на *.*, чтобы стали видны файлы изображений. Вы можете добавлять собственные файлы изображений или задействовать три файла изображений с именами Deer.jpg
, Dogs.jpg
и Welcome.jpg
из загружаемого кода примеров.
Чтобы скопировать содержимое папки \Images
в папку \bin\Debug
при компиляции проекта, выберите все изображения в окне Solution Explorer, щелкните правой кнопкой мыши и выберите в контекстном меню пункт Properties (Свойства); откроется окно Properties (Свойства). Установите свойство Build Action (Действие сборки) в Content (Содержимое), а свойство Copy Output Directory (Копировать в выходной каталог) в Copy always (Копировать всегда), как показано на рис. 27.1.
На заметку! Для свойства Copy Output Directory можно было бы также выбрать вариант Copy if Newer (Копировать, если новее), что позволит сократить время копирования при построении крупных проектов с большим объемом содержимого. В рассматриваемом примере варианта Copy always вполне достаточно.
После компиляции проекта появится возможность щелкнуть на кнопке Show all Files (Показать все файлы) в окне Solution Explorer и просмотреть скопированную папку \Images
внутри \bin\Debug
(может также потребоваться щелкнуть на кнопке Refresh (Обновить)).
Инфраструктура WPF предоставляет класс по имени BitmapImage
, определенный в пространстве имен System.Windows.Media.Imaging
. Он позволяет загружать данные из файла изображения, местоположение которого представлено объектом System.Uri
. Добавьте поле типа List
для хранения всех изображений, а также поле типа int
для хранения индекса изображения, показанного в текущий момент:
// Список файлов BitmapImage.