如何在运行时创建wpf UserControl的实例?

时间:2017-11-06 13:26:44

标签: c# wpf user-controls

除了获取实例之外,我的问题是如何将此实例作为wpf UserControl。

我有一个UserControl(Holder),它可以显示另一个UserControls(childs),这些控件都在同一个程序集中,但用户可以选择哪些必须放入holder。

我正在创建实例:

        CapturasAdicionalesControl ctr = d as CapturasAdicionalesControl;
        List<ICapturaAdicional> capturas = ctr.Capturas;
        string assemblyName = "MyAssemblyPath";

        Assembly assembly = Assembly.Load(assemblyName);

        foreach (ICapturaAdicional captura in capturas)
        {
            Type capturaObj = assembly.GetType($"{assemblyName}.{captura.Control}");
            InsertCaptura(capturaObj);
        }

我得到了我的类型,但是当尝试添加到Holder时,它会从类型到UserControl生成无效的强制转换。

我试图使用(UserControl)MyType ... MyType作为UserControl但没有结果。

现在我的问题是:

  1. 如何将我的类型(已经是usercontrol)转换/转换为UserControl
  2. 如果一个人不可能

    1. 如何直接从程序集中将我的用户控件作为Usercontrol,或者如果只有它的名字,如何创建它的实例?

    2. 另一种方法会非常感激吗?

    3. 编辑1

          private static Grid InsertCaptura(UserControl instance)
          {
              Grid NewGrid = new Grid()
              {
                  Style = (Style)Application.Current.FindResource("TabOptionBackGroundStyle")
              };
              NewGrid.RowDefinitions.Add(new RowDefinition() { });
              NewGrid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
              NewGrid.RowDefinitions.Add(new RowDefinition() { });
      
              NewGrid.ColumnDefinitions.Add(new ColumnDefinition() { });
              NewGrid.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto });
              NewGrid.ColumnDefinitions.Add(new ColumnDefinition() { });
      
              Grid.SetColumn((UIElement)instance, 1);
              Grid.SetRow((UIElement)instance, 1);
      
              NewGrid.Children.Add((UIElement)instance);
      
              return NewGrid;
      
          }
      

0 个答案:

没有答案