我有一些UserControl
名为a1,a2,b1,b2 ......我想根据两个变量的值加载其中一个。例如,如果var1 = a
,var2 = 1
,则会加载名为UserControl
的{{1}}。
有没有办法做到这一点?也许还有其他一些替代方法?
这里的a1
语句不是一个可行的选项,因为会有200个不同的UserControls。
答案 0 :(得分:3)
您可以使用.NET Reflection按其String
值加载控件。
你可以使用这样的代码来动态创建对象。
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.
}
}
}
答案 1 :(得分:2)
您可以使用Activator.CreateInstance从类型的字符串名称创建UserControl
实例。
但是你最好用样式或控件模板解决这个问题 - 这些都是减少代码量及其在WPF中的复杂性的好工具。
答案 2 :(得分:0)
强大的可能性是使用XamlReader来创建控件。
在您的示例中,这不是理想的,但使用xaml-reader的一大优势是您还可以在初始化期间通过xamlReader初始化控件的属性。