我在用MaterialDesignInXAML。
程序引用的库非常大,因此在构建时会对库进行压缩。
当程序启动时,压缩库动态加载。
成功地识别了所有库的加载。(调试窗口模块)
问题就出现在这里。
下面是设计代码。
这段代码不会引起任何问题.
<Button Style="{StaticResource MaterialDesignFloatingActionButton}" Width="32" Height="32" Content="{materialDesign:PackIcon Kind=Add, Size=24}"/>
,但这段代码会导致问题.
<Button Style="{StaticResource MaterialDesignFloatingActionButton}" Width="32" Height="32">
<materialDesign:PackIcon Kind="Add" Width="24" Height="24"/>
</Button>
第一个代码结果正常加载图标。但是第二个代码的结果是图标被重置。
在研究了这个问题之后,我认为MaterialDesignThemes.Wpf库中存在一个问题。但是我一个星期都解决不了这个问题。
静态加载库不会造成任何问题。
这个问题有解决办法吗?
发布于 2019-08-21 11:03:11
最后我解决了这个问题。
问题是绑定上下文。
这是解决办法。
static Dictionary<string, Assembly> loadedAssemblies = new Dictionary<string, Assembly>();
static Program()
{
AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoad;
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
private static void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
{
var name = args.LoadedAssembly.FullName.Substring(0, args.LoadedAssembly.FullName.IndexOf(',')) + ".dll";
if (!loadedAssemblies.ContainsKey(name))
loadedAssemblies.Add(name, args.LoadedAssembly);
}
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
Assembly thisAssembly = Assembly.GetExecutingAssembly();
var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
if (loadedAssemblies.ContainsKey(name))
return loadedAssemblies[name];
var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name));
if (resources.Count() > 0)
{
string resourceName = resources.First();
using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName))
{
if (stream != null)
{
byte[] assembly = new byte[stream.Length];
stream.Read(assembly, 0, assembly.Length);
Console.WriteLine("Dll file load : " + resourceName);
return Assembly.Load(assembly);
}
}
}
return null;
}
https://stackoverflow.com/questions/57584104
复制相似问题