Включить значок для модуля Prism - PullRequest
1 голос
/ 07 января 2011

Я хочу, чтобы моя оболочка Prism отображала изображение и метку для каждого обнаруживаемого модуля. Как мне включить образ из сборки модуля и получить к нему доступ в оболочке?

Я уже пытался создать интерфейс для предоставления значка (как ImageSource) и метки строки, но у меня возникают проблемы при создании ImageSource из изображения в сборке модуля. (URI, используемый в конструкторе для BitmapImage, всегда хочет найти содержимое в сборке оболочки, а не в сборке модуля.)

Я думал, что мог бы добавить изображение в качестве ресурса и просто использовать его, но оно представлено в коде как System.Drawing.Bitmap, и я не смог найти очевидный способ преобразовать его в тип, используемый в WPF ракушка. (Я видел некоторый код для преобразования из Bitmap, но это похоже на неправильный подход. Хотя, возможно, придется с этим согласиться.) [Редактировать: Этот подход действительно работает, но я все еще думаю, что пахнет.]

Ответы [ 2 ]

1 голос
/ 11 января 2011

Пэт, ваша проблема, скорее всего, потому что вы не используете правильный путь к изображению.Вы пытаетесь загрузить это изображение в конструктор представления или что-то еще, после чего импорт не может быть найден.Вы хотите дважды проверить, скомпилировано ли ваше изображение в качестве ресурса.Используйте это (при условии, что ваше изображение называется Icon.png и находится в корневом каталоге проекта вашего модуля)

public BitmapImage Icon
{
    get
    {
        var assembly = Assembly.GetCallingAssembly();

        Uri uri = new Uri("/" + GetType().Assembly.ToString().Split(',')[0] + ";component/Icon.png", UriKind.Relative);

        if (_icon == null)
            _icon = new BitmapImage(uri);

        return _icon;
    }
}
0 голосов
/ 07 января 2011

Когда вы возвращаете BitmapSource из модуля, обязательно используйте Pack Uri .Если вы пытаетесь загрузить изображение из сборки ModuleFoo.dll, вы должны сделать что-то вроде этого:

public ImageSource ModuleImage
{
    get 
    {
        return BitmapFrame.Create(new Uri("pack://application:,,,/ModuleFoo;component/ModuleIcon.png", UriKind.Absolute); 
    }
}

Помните, что для ресурсов WPF изображения должны быть скомпилированы в качестве «ресурса», а не«Встроенный ресурс», который требуется WinForms.

...