Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Система ресурсов WPF
Первой задачей будет исследование темы встраивания и доступа к ресурсам приложения. Инфраструктура WPF поддерживает два вида ресурсов. Первый из них — двоичные ресурсы; эта категория обычно включает элементы, которые большинство программистов считают ресурсами в традиционном смысле (встроенные файлы изображений или звуковых клипов, значки, используемые приложением, и т.д.).
Вторая категория, называемая объектными ресурсами или логическими ресурсами, представляет именованные объекты .NET, которые можно упаковывать и многократно применять повсюду в приложении. Несмотря на то что упаковывать в виде объектного ресурса разрешено любой объект .NET, логические ресурсы особенно удобны при работе с графическими данными произвольного рода, поскольку можно определить часто используемые графические примитивы (кисти, перья, анимации и т.д.) и ссылаться на них по мере необходимости.
Работа с двоичными ресурсами
Прежде чем перейти к теме объектных ресурсов, давайте кратко проанализируем, как упаковывать двоичные ресурсы вроде значков и файлов изображений (например, логотипов компании либо изображений для анимации) внутри приложений. Создайте в Visual Studio новый проект приложения WPF по имени
BinaryResourcesAppLoadedDockPanel<Window x:Class="BinaryResourcesApp.MainWindow" <! -- Для краткости разметка не показана --> Title="Fun with Binary Resources" Height="500" Width="649" Loaded="MainWindow_OnLoaded"> <DockPanel LastChildFill="True"> </DockPanel></Window>Предположим, что приложение должно отображать внутри части окна один из трех файлов изображений, основываясь на пользовательском вводе. Элемент управления
Image*.bmp*.gif*.ico*.jpg*.png*.wdp*.tiffDrawingImageDockPanelImageSource<DockPanel LastChildFill="True"> <ToolBar Height="60" Name="picturePickerToolbar" DockPanel.Dock="Top"> <Button x:Name="btnPreviousImage" Height="40" Width="100" BorderBrush="Black" Margin="5" Content="Previous" Click="btnPreviousImage_Click"/> <Button x:Name="btnNextImage" Height="40" Width="100" BorderBrush="Black" Margin="5" Content="Next" Click="btnNextImage_Click"/> </ToolBar><b> <!-- Этот элемент Image будет заполняться в коде --> </b> <Border BorderThickness="2" BorderBrush="Green"> <Image x:Name="imageHolder" Stretch="Fill" /> </Border></DockPanel>Добавьте следующие пустые обработчики событий:
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. Располагая инфраструктурой приложения, можно заняться исследованием разных вариантов ее реализации.
Включение в проект несвязанных файлов ресурсов
Один из вариантов предусматривает поставку файлов изображений в виде набора несвязанных файлов в каком-то подкаталоге внутри пути установки приложения. Начните с создания в проекте новой папки (по имени
ImagesDeer.jpgDogs.jpgWelcome.jpgКонфигурирование несвязанных ресурсов
Чтобы скопировать содержимое папки
ImagesbinDebug