Чтение онлайн

на главную - закладки

Жанры

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

На заметку! Для свойства 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<BitmapImage>
для хранения всех изображений, а также поле типа
int
для хранения индекса изображения, показанного в текущий момент:

// Список файлов BitmapImage.

List<BitmapImage> _images=new List<BitmapImage>;

// Текущая позиция в списке.

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)

{

if (++_currImage >=_images.Count)

{

_currImage=0;

}

imageHolder.Source=_images[_currImage];

}

Теперь

можете запустить программу и переключаться между всеми изображениями.

Встраивание ресурсов приложения

Если файлы изображений необходимо встроить прямо в сборку .NET Core как двоичные ресурсы, тогда выберите файлы изображений в окне Solution Explorer (из папки

\Images
, а не
\bin\Debug\Images
) и установите свойство Build Action в Resource (Ресурс), а свойство Copy to Output Directory — в Do not copy (He копировать), как показано на рис. 27.2.

В меню Build (Сборка) среды Visual Studio выберите пункт Clean Solution (Очистить решение), чтобы очистить текущее содержимое папки

\bin\Debug\Images
, и повторно скомпилируйте проект. Обновите окно Solution Explorer и удостоверьтесь в том, что данные в каталоге
\bin\Debug\Images
отсутствуют. При текущих параметрах сборки графические данные больше не копируются в выходную папку, а встраиваются в саму сборку. Прием обеспечивает наличие ресурсов, но также приводит к увеличению размера скомпилированной сборки.

Вам нужно модифицировать код для загрузки изображений в список, извлекая их из скомпилированной сборки:

// Извлечь из сборки и затем загрузить изображения.

_images.Add(new BitmapImage(new Uri(@"/Images/Deer.jpg", UriKind.Relative)));

_images.Add(new BitmapImage(new Uri(@"/Images/Dogs.jpg", UriKind.Relative)));

_images.Add(new BitmapImage(new Uri(@"/Images/Welcome.jpg", UriKind.Relative)));

В таком случае больше не придется определять путь установки и можно просто задавать ресурсы по именам, которые учитывают название исходного подкаталога. Также обратите внимание, что при создании объектов

Uri
указывается значение
Relative
перечисления
UriKind
. В данный момент исполняемая программа представляет собой автономную сущность, которая может быть запущена из любого местоположения на машине, т.к. все скомпилированные данные находятся внутри сборки.

Поделиться:
Популярные книги

Жалкая

Макинтайер Эмили
3. Долго и Несчастливо
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Жалкая

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Академия проклятий. Книги 1 - 7

Звездная Елена
Академия Проклятий
Фантастика:
фэнтези
8.98
рейтинг книги
Академия проклятий. Книги 1 - 7

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Измена

Рей Полина
Любовные романы:
современные любовные романы
5.38
рейтинг книги
Измена

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Сердце для стража

Каменистый Артем
5. Девятый
Фантастика:
фэнтези
боевая фантастика
9.20
рейтинг книги
Сердце для стража

Черный Маг Императора 11

Герда Александр
11. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Черный Маг Императора 11

Имя нам Легион. Том 3

Дорничев Дмитрий
3. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 3

Жена фаворита королевы. Посмешище двора

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Жена фаворита королевы. Посмешище двора

Как я строил магическую империю 5

Зубов Константин
5. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 5

Блуждающие огни 2

Панченко Андрей Алексеевич
2. Блуждающие огни
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Блуждающие огни 2

Ратник

Ланцов Михаил Алексеевич
3. Помещик
Фантастика:
альтернативная история
7.11
рейтинг книги
Ратник

Маленькая слабость Дракона Андреевича

Рам Янка
1. Танцы на углях
Любовные романы:
современные любовные романы
эро литература
5.25
рейтинг книги
Маленькая слабость Дракона Андреевича