从wpf中未引用的dll加载图像
本文关键字:dll 加载 图像 引用 wpf | 更新日期: 2023-09-27 17:57:35
我使用wpf开发应用程序,它可以使用多种语言。用户可以将语言dll放在Languages文件夹中,并动态加载程序。我想显示带有国家标志的程序集名称。我写了这个代码,但标志图像没有显示在组合框中。我该怎么做?
var assemblies = dir.GetFiles("*.dll", SearchOption.AllDirectories);
//for each found .dll we will create a model and set its properties and then add to list
for (int i = 0; i < assemblies.Count(); i++)
{
var assemblyName = assemblies[i].Name.Substring(0, assemblies[i].Name.LastIndexOf("."));
string packUri = string.Format("pack://application:,,,/{0};component/Image/flag.png", assemblyName);
Uri uri = new Uri(packUri, UriKind.Absolute);
BitmapImage image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
try
{
image.UriSource = uri;
image.EndInit();
}
catch (Exception ex)
{
var m = ex.Message;
}
CultureAssemblyModel model = new CultureAssemblyModel()
{
DisplayText = assemblies[i].Name.Split('.', '_')[2],
Culture = assemblies[i].Name.Split('.', '_')[1],
Name = assemblies[i].Name,
XamlFileName = assemblies[i].Name.Substring(0, assemblies[i].Name.LastIndexOf(".")) + ".xaml",FlagImage=image
};
我可能会尝试使用MEF来做这种事情。
我允许你:
- 以一种非常简单的方式动态加载dll
- 根据合约重新推荐您的类
- 让您的用户(DLL的创建者)扩展您的应用程序
这可能会在加载部分简化很多,但在dll创建部分当然要复杂一些。