C# 通过其他事件打开视图

C# 通过其他事件打开视图,c#,wpf,C#,Wpf,我有几个视图需要打开,但我不想重复代码。当前,每个按钮都会触发如下内容: private void icon_Add(object sender, RoutedEventArgs e) { viewName var = new viewName(); var.Show(); Close(); } 理想情况下,我希望这样(但不知道应该使用哪种类型的变量/对象): 任何帮助都将不胜感激(再次)。您可以通过使用反射来解决它 这意味着您要将要打开的窗口类型传递给OpenView

我有几个视图需要打开,但我不想重复代码。当前,每个按钮都会触发如下内容:

private void icon_Add(object sender, RoutedEventArgs e)
{
    viewName var = new viewName();
    var.Show();
    Close();
}
理想情况下,我希望这样(但不知道应该使用哪种类型的变量/对象):


任何帮助都将不胜感激(再次)。

您可以通过使用反射来解决它

这意味着您要将要打开的窗口类型传递给OpenView方法。此方法使用默认构造函数创建实例。然后,它将调用Show并关闭创建的窗口。IF-before-all用于检查传递的类型是否为窗口

也可以将构造函数参数传递给CreateInstance,以防在每个窗口上都没有默认构造函数


我希望这有点道理。

所有视图都有这样的默认构造函数吗?这是WinForms应用程序吗?很抱歉。。。。这是一个WPF应用程序,基本上(尽管我以后可能会添加一些额外的变量)。你能在你的问题中添加WPF标签吗?
private void icon_Add(object sender, RoutedEventArgs e)
{
    OpenView(viewName)
}

private voice OpenView(?????? newView)
{
    newView var = new newView();
    var.Show();
    Close();
}
private void icon_Add(object sender, RoutedEventArgs e)
{
    OpenView(typeof(viewName));
}

private void OpenView(Type newView)
{
    if(typeof(Window).IsAssignableFrom(newView)) {
        Window window = (Window)Activator.CreateInstance(newView);
        window.Show();
        window.Close();
    }
}