Wpf:通过插件的属性将图像添加到dll解决方案中

时间:2014-05-04 14:14:07

标签: wpf image resources

App有插件支持。每个插件(DLL)都有刚刚添加到解决方案中的png类型的图像(当前构建操作是'内容',请参见图片)。每个插件实现一个接口,接口的一个属性是图像表示,例如, 'Icon'财产。我想加载插件,并在工具箱上为每个插件显示该属性的图像。

enter image description here

public interface ISomePlugin {
   GetSomeImageTypeDontKnowWhat Icon { get;  }
}

[Export(typeof(ISomePlugin))]
internal SomePlugin : ISomePlugin 
{
    public GetSomeImageTypeDontKnowWhat Icon {
        ...
        return GetSomeImageTypeDontKnowWhat;
    }
}

然后我希望(例如)以某种方式将该图像分配给来自后面代码的一些WPF控件内容

// just loaded a plugin thru MEF
btn1.Content = plugin.Icon;

P.S。对不起这么愚蠢的解释问题..

1 个答案:

答案 0 :(得分:0)

自己找到解决方案,将图像添加到资源文件中。拜托,您能否回顾并说这是正确的方法吗?难道不存在内存泄漏问题吗?

  1. 创建了一个插件dll项目' New Item ...' > '资源文件' (称为' Settings.resx')
  2. 在该资源文件中添加了一个png图像'添加现有文件...'。
  3. 实施了插件的界面属性' Icon'图像类型为:

    public Image Icon { get
    {
        Stream stream = new MemoryStream();
        Settings.icon.Save(stream, ImageFormat.Png);
        stream.Position = 0;
        byte[] buffer = new byte[stream.Length];
        stream.Read(buffer, 0, (int)stream.Length);
        BitmapImage bitmapImage = new BitmapImage();
        bitmapImage.BeginInit();
        bitmapImage.StreamSource = stream;
        bitmapImage.EndInit();
        return new Image { Source = bitmapImage };
    } }
    
  4. 现在在插件使用者代码中,我使用返回值

    // load and enumerate plugins code
    btn1.Content = plugin.Icon;