Убедитесь, что вызов метода происходит в отдельном пуле / потоке потоков с использованием Moq

Хотя ресурс изображения в проекте 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.

2
задан swdon 28 March 2019 в 01:30
поделиться