C#反射 WPF控件 不能更新
现在有两个WPF做的dll 控件 A.dll 和 B.dll
在Winform中 有两个按钮btn1 btn2 和一个elementHost1控件。
private void btn1_Click(object sender, EventArgs e)
{
Object obj2;
Assembly SampleAssembly2;
SampleAssembly2 = Assembly.LoadFrom("A.dll");
obj2 = SampleAssembly2.CreateInstance("Roye.ZRY_Dll");
elementHost1.Child = (UIElement)obj2;
}
private void btn2_Click(object sender, EventArgs e)
{
Object obj2;
Assembly SampleAssembly2;
SampleAssembly2 = Assembly.LoadFrom("B.dll");
obj2 = SampleAssembly2.CreateInstance("Roye.ZRY_Dll");
elementHost1.Child = (UIElement)obj2;
}
为什么elementHost1.Child不会改变呢?
请高手留下邮箱,我发测试源码给大家
wpf
c#
反射
------解决方案--------------------42809764@qq.com
------解决方案--------------------确保Roye.ZRY_Dll继承UserControl
------解决方案--------------------两个dll中继承UserControl的类名称(包括命名空间)一样,改下
------解决方案--------------------
不想改名也可以,先设置为null,然后再设置要更新的对象吧
------解决方案--------------------lz干脆elementHost1动态创建吧,没次把窗体上的elementHost1移出,再创建个新的
this.Controls.Remove(elementHost1);
elementHost1=new ElementHost1();
this.Controls.Add(elementHost1);
elementHost1.Location = new System.Drawing.Point(113, 12);
elementHost1.Name = "elementHost1";
elementHost1.Size = new System.Drawing.Size(329, 354);
....
------解决方案--------------------...你
两个dll里的程序集命名空间和类名完全一样...
------解决方案--------------------抱歉不是同名问题。
我发现你的两个dll是相同的。
你的两个dll是一个项目编译出来的吧(只改了一个图片?)然后改了一下编译好的dll的名字?
如果是,改下AssemblyInfo.cs,重新编译
------解决方案--------------------最好用两个项目去分别编译dll