C# 如何通过指定字符串值来加载UserControl?

C# 如何通过指定字符串值来加载UserControl?,c#,.net,wpf,user-controls,C#,.net,Wpf,User Controls,我有一些名为a1、a2、b1、b2的UserControls。。。我想根据两个变量的值加载其中一个。例如,如果var1=a,var2=1,将加载名为a1的UserControl 有没有办法做到这一点?也许还有其他替代方法 switch语句在这里不是一个可行的选项,因为将有大约200个不同的UserControls。您可以使用从类型的字符串名称创建UserControl实例 但是您最好使用样式或控件模板来解决这个问题-这两个模板都是减少WPF中代码数量及其复杂性的好工具。您可以使用从类型的字符串名

我有一些名为a1、a2、b1、b2的
UserControl
s。。。我想根据两个变量的值加载其中一个。例如,如果
var1=a
var2=1
,将加载名为
a1
UserControl

有没有办法做到这一点?也许还有其他替代方法

switch
语句在这里不是一个可行的选项,因为将有大约200个不同的UserControls。

您可以使用从类型的字符串名称创建
UserControl
实例

但是您最好使用样式或控件模板来解决这个问题-这两个模板都是减少WPF中代码数量及其复杂性的好工具。

您可以使用从类型的字符串名称创建
UserControl
实例


但是你最好用样式或控件模板来解决这个问题——它们都是减少WPF中的代码量和复杂性的好工具。

一个强大的可能性就是使用它们来创建控件


在您的示例中,这并不是一个理想的方法,但使用xaml读取器的一大优点是,您还可以在初始化期间通过xaml读取器初始化控件的属性。

一个强大的可能性是使用它来创建控件


在您的示例中,这不是所希望的,但使用xaml读取器的一大优点是,您还可以在初始化过程中通过xaml读取器初始化控件的属性。

您可以使用.NET反射按其
字符串
值加载控件

可以使用类似这样的代码动态创建对象

using System.Reflection;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            //this is the full namespace name of UserControl.
            // you could use something like String.Format("WpfApplication1.{0}", "uc1") to put in a function and pass through.
            string ucName = "WpfApplication1.uc1";

            Type newType = Type.GetType("WpfApplication1.uc1", true, true);

            object o = Activator.CreateInstance(newType);

            //Use the object to how ever you like from here on wards.


        }
    }
}
使用系统反射;
命名空间WpfApplication1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
//这是UserControl的完整命名空间名称。
//您可以使用String.Format(“WpfApplication1.{0}”、“uc1”)之类的东西来放入函数并传递。
字符串ucName=“WpfApplication1.uc1”;
Type newType=Type.GetType(“WpfApplication1.uc1”,true,true);
对象o=Activator.CreateInstance(newType);
//从现在开始,你可以随意使用该对象。
}
}
}

您可以使用.NET反射按控件的
字符串
值加载控件

可以使用类似这样的代码动态创建对象

using System.Reflection;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            //this is the full namespace name of UserControl.
            // you could use something like String.Format("WpfApplication1.{0}", "uc1") to put in a function and pass through.
            string ucName = "WpfApplication1.uc1";

            Type newType = Type.GetType("WpfApplication1.uc1", true, true);

            object o = Activator.CreateInstance(newType);

            //Use the object to how ever you like from here on wards.


        }
    }
}
使用系统反射;
命名空间WpfApplication1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
//这是UserControl的完整命名空间名称。
//您可以使用String.Format(“WpfApplication1.{0}”、“uc1”)之类的东西来放入函数并传递。
字符串ucName=“WpfApplication1.uc1”;
Type newType=Type.GetType(“WpfApplication1.uc1”,true,true);
对象o=Activator.CreateInstance(newType);
//从现在开始,你可以随意使用该对象。
}
}
}

这对我来说很有效,我只需要添加一些类似于stkPanel.Children.add(uielmento)的内容当我单击包含我的用户控件名称的按钮时,动态加载我的用户控件这对我来说很有效,我只需要添加类似于stkPanel.childrent.add(UIElment o)的内容在单击包含用户控件名称的按钮时动态加载用户控件