C# 如何通过指定字符串值来加载UserControl?
我有一些名为a1、a2、b1、b2的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中代码数量及其复杂性的好工具。您可以使用从类型的字符串名
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)的内容在单击包含用户控件名称的按钮时动态加载用户控件