Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Страница 538

На заметку! Для свойства Copy Output Directory можно было бы также выбрать вариант Copy if Newer (Копировать, если новее), что позволит сократить время копирования при построении крупных проектов с большим объемом содержимого. В рассматриваемом примере варианта Copy always вполне достаточно.
После компиляции проекта появится возможность щелкнуть на кнопке Show all Files (Показать все файлы) в окне Solution Explorer и просмотреть скопированную папку
\Images\bin\DebugПрограммная загрузка изображения
Инфраструктура WPF предоставляет класс по имени
BitmapImageSystem.Windows.Media.ImagingSystem.UriList<BitmapImage>int<b>// Список файлов BitmapImage.</b>List<BitmapImage> _images=new List<BitmapImage>();<b>// Текущая позиция в списке.</b>private int _currImage=0;Внутри обработчика события
LoadedSourceImageprivate 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 (Сборка) среды Visual Studio выберите пункт Clean Solution (Очистить решение), чтобы очистить текущее содержимое папки
\bin\Debug\Images\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)));В таком случае больше не придется определять путь установки и можно просто задавать ресурсы по именам, которые учитывают название исходного подкаталога. Также обратите внимание, что при создании объектов
UriRelativeUriKind