按名称显示WPF窗口

时间:2010-06-03 14:32:56

标签: c# wpf

项目A包含一个WPF窗口(数据输入表单),其中包含用于启动各种报告的堆栈面板命令。菜单是来自数据库的动态构建列表。我正在尝试做的是基于与菜单选项关联的CommandText启动相应的WPF窗口。我想创建一个接受WPF窗口名称(CommandText)的函数,并按名称启动窗口的新实例。

我找到了如何在类上启动方法的示例,但似乎找不到适用于窗口的方法。我知道它可以通过一个开关来完成,只是映射所有窗口,但是有60-70,我试图避免臃肿。

我多次尝试使用TypeOfActivator.CreateInstance失败了。建议?这甚至可能吗?

2 个答案:

答案 0 :(得分:4)

Activator对我来说很好。你有什么错误?如果以下代码适合您,请尝试

private void Button_Click(object sender, RoutedEventArgs e)
{
    Window wnd = (Window)CreateWindow("WpfApplication1.Window2");
    wnd.Show();

}

public object CreateWindow(string fullClassName)
{
    Assembly asm = this.GetType().Assembly;

    object wnd = asm.CreateInstance(fullClassName);
    if (wnd == null)
    {
        throw new TypeLoadException("Unable to create window: " + fullClassName);
    }
    return wnd;
}

答案 1 :(得分:1)

你可以试试这个:

string windowClass = "CreateWindow.MyWindow";
Type type = Assembly.GetExecutingAssembly().GetType(windowClass);
ObjectHandle handle = Activator.CreateInstance(null, windowClass);
MethodInfo method = type.GetMethod("Show");
method.Invoke(handle.Unwrap(), null);

上面的代码假定您的窗口名为“CreateWindow.MyWindow”(带有名称空间前缀),并且“CreateWindow.MyWindow”类型位于当前正在执行的程序集中。