日期:2014-05-17  浏览次数:21014 次

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的类名称(包括命名空间)一样,改下
------解决方案--------------------
引用:
两个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