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

时间:2011-02-21 11:49:37

标签: c# .net wpf user-controls

我有一些UserControl名为a1,a2,b1,b2 ......我想根据两个变量的值加载其中一个。例如,如果var1 = avar2 = 1,则会加载名为UserControl的{​​{1}}。

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

这里的a1语句不是一个可行的选项,因为会有200个不同的UserControls。

3 个答案:

答案 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初始化控件的属性。