利用反射动态创建WPF控件对象,该如何解决

利用反射动态创建WPF控件对象

                    Assembly ass = Assembly.LoadFrom(ofg.FileName);
                    foreach (Type type in ass.GetTypes())
                    {
                        if (type.IsSubclassOf(typeof(FrameworkElement)))
                        {
                            UIElement obj = Activator.CreateInstance(type) as UIElement;
                            Canvas.SetTop(obj, 0);
                            Canvas.SetLeft(obj, 0);
                            schemaView.MainCanvas.Children.Add(obj);
                        }
                    }

想动态加载dll创建WPF控件,但这段代码在创建某些继承于FrameworkElement类的对象时,本段代码执行没问题,而实际该控件没办法被创建,比如DataGridDetailsPresenter ,它虽继承于FrameworkElement,但是不能创建该对象
 https://msdn.microsoft.com/zh-cn/expression/system.windows.controls.primitives.datagriddetailspresenter
我想知道利用反射动态创建WPF控件对象,除了继承于FrameworkElement之外,还有什么条件吗?
------解决思路----------------------
既然你提供了链接,那你应该也看了
在 DataGrid 的模板中使用,用于指定要将行详细信息添加到控件的可视化树中的什么位置
https://msdn.microsoft.com/zh-cn/library/cc278066
看样子你应该是动态将它创建到datagrid.Style中,而你的代码却会直接将它加到画布上
------解决思路----------------------
动态加载这种东西看着挺好,用起来可就不那么好了,你应该注意到使用上的局限性
不仅是wpf,即使是winform、asp.net也是一样
不知道你要做什么,大量的动态创建控件不管是效率、维护还是扩展性都不好。是否该换一种思路
------解决思路----------------------
DataGridDetailsPresenter类用来做DataGrid的自定义模板, 是没办法用于Canvas, 你可以把位于System.Windows.Controls.Primitives命名空间中的所有Control全部过滤掉.