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.
List
// Текущая позиция в списке.
private int _currImage=0;
Внутри обработчика события Loaded
окна заполните список изображений и установите свойство Source
элемента управления Image
в первое изображение из списка:
private void MainWindow_OnLoaded(
object sender, RoutedEventArgs e)
{
try
{
string path=Environment.CurrentDirectory;
// Загрузить эти изображения из диска при загрузке окна.
_images.Add(new BitmapImage(new Uri($@"{path}\Images\Deer.jpg")));
_images.Add(new BitmapImage(new Uri($@"{path}\Images\Dogs.jpg")));
_images.Add(new BitmapImage(new Uri($@"{path}\Images\Welcome.jpg")));
// Показать первое изображение в списке.
imageHolder.Source=_images[_currImage];
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Реализуйте обработчики для кнопок Previous и Next, чтобы обеспечить проход по изображениям. Когда пользователь добирается до конца списка, происходит переход в начало и наоборот.
private void btnPreviousImage_Click(
object sender, RoutedEventArgs e)
{
if (--_currImage < 0)
{
_currImage=_images.Count - 1;
}
imageHolder.Source=_images[_currImage];
}
private void btnNextImage_Click(
object sender, RoutedEventArgs e)
{
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT