代码之家  ›  专栏  ›  技术社区  ›  Begtostudy

如何在WPF中加载带有反射的UserControl?

  •  0
  • Begtostudy  · 技术社区  · 14 年前
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        var assm = Assembly.LoadFrom("wpflib.dll");
        foreach (var t in assm.GetTypes())
        {
            var i = t.GetInterface("test.ILib");
            if (i != null)
            {
                var tmp = Activator.CreateInstance(typeof(UserControl)) as UserControl;
                this.stackPanel1.Children.Add(tmp);
            }
        }
    }
    

    但是,为什么Windows1(stackPanel1)中什么都没有?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Timwi    14 年前

    您根本没有从DLL实例化类型。而不是:

    var tmp = Activator.CreateInstance(typeof(UserControl)) as UserControl;
    

    写:

    var tmp = Activator.CreateInstance(t) as UserControl;
    

    var tmp = (UserControl) Activator.CreateInstance(t);
    

    相反。否则,如果您有一个bug,您将在以后得到一个空引用异常,这不是很有用,也很难调试。这样,您就可以在错误实际发生的正确位置获得更有意义的类型转换异常。