Хотя ресурс изображения в проекте WPF генерирует свойство System.Drawing.Bitmap
в Resources.Designer.cs
, вы можете напрямую создать BitmapImage
из этого ресурса. Вам нужно только установить Build Action файла изображения на Resource
(вместо значения по умолчанию None
).
Если у вас есть файл Red.jpg
в Resources
в вашем проекте Visual Studio, создание BitmapImage
будет выглядеть, как показано ниже. Он использует WPF Pack Uri .
var uri = new Uri("pack://application:,,,/Resources/Red.jpg");
var bitmap = new BitmapImage(uri);
Если у вас есть Image
элемент управления, объявленный где-то в XAML следующим образом:
вы могли бы просто установить свойство Source
изображения в свой битмап-файл в коде позади:
image.Source = bitmap;
Если вы предпочитаете устанавливать свойство Source
на вы могли бы создать свойство string
, которое возвращает URI изображения. Строка автоматически преобразуется в BitmapImage
с помощью встроенного TypeConverter
в WPF.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
ImageUri = "pack://application:,,,/Resources/Red.jpg";
}
public static readonly DependencyProperty ImageUriProperty =
DependencyProperty.Register("ImageUri", typeof(string), typeof(MainWindow));
public string ImageUri
{
get { return (string)GetValue(ImageUriProperty); }
set { SetValue(ImageUriProperty, value); }
}
}
В XAML вы привязываетесь к этому свойству:
Конечно, вы могли бы также объявить свойство типа ImageSource
public static readonly DependencyProperty ImageProperty =
DependencyProperty.Register("Image", typeof(ImageSource), typeof(MainWindow));
public ImageSource Image
{
get { return (ImageSource)GetValue(ImageProperty); }
set { SetValue(ImageProperty, value); }
}
и связать таким же образом:
Теперь вы можете предварительно загрузить изображения и поместить их в свойство по мере необходимости:
private ImageSource imageRed =
new BitmapImage(new Uri("pack://application:,,,/Resources/Red.jpg"));
private ImageSource imageBlue =
new BitmapImage(new Uri("pack://application:,,,/Resources/Blue.jpg"));
...
Image = imageBlue;
UPDATE: в конце концов, ваши изображения не должны быть ресурсами в проект Visual Studio. Вы можете просто добавить папку проекта, поместить файлы изображений в эту папку и установить для своего действия по сборке значение Resource
. Если, например, вы вызываете папку Images
, URI будет pack://application:,,,/Images/Red.jpg
.