开发者

Displaying a WPF Window by name

Project A contains a WPF Window (Data Entry Form) with a stack panel of commands that launch various reports. The menu is a dynamically built list from a database. What I’m attempting to do is launch the corresponding WPF window based on the CommandText associated with the menu choice. I’d like to create a single function that accepts the name of the WPF Window (CommandText) and launches a new instance of the window by name.

I’ve found examples of how to launch methods on classes, but can’t seem to find a method th开发者_运维百科at works with a window. I know it can be done with a switch and just map all the windows, but there are 60-70 and I was trying to avoid bloat.

I’m failed repeatedly trying to use the TypeOf and Activator.CreateInstance. Suggestions? Is this even possible?


Activator works fine for me. What error do you have? Try if below code will work for you

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;
}


You might try this:

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);

The code above assumes that your window is called "CreateWindow.MyWindow" (with namespace prefix) and that the type "CreateWindow.MyWindow" is in the currently executing assembly.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜