Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WPF如何创建可以创建特定窗口的通用方法_C#_Wpf_Generics_Types - Fatal编程技术网

C#WPF如何创建可以创建特定窗口的通用方法

C#WPF如何创建可以创建特定窗口的通用方法,c#,wpf,generics,types,C#,Wpf,Generics,Types,我目前在App.Xaml.Cs项目中使用此方法: private void ApplicationStart(object sender, StartupEventArgs e) { Current.ShutdownMode = ShutdownMode.OnExplicitShutdown; var NetworkConnectionView = new NetworkConnectionView(); NetworkC

我目前在App.Xaml.Cs项目中使用此方法:

private void ApplicationStart(object sender, StartupEventArgs e)
{
            Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;

            var NetworkConnectionView = new NetworkConnectionView();
            NetworkConnectionView.ShowDialog();

            if (NetworkConnectionView.ConnectionNetWorkServerInternetState == ConnectionStatus.NetworkConnectionSuccess)
            {
                var mainWindow = new MainWindow();
                Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
                Current.MainWindow = mainWindow;
                mainWindow.Show();
            }

            else if(NetworkConnectionView.ConnectionNetWorkServerInternetState == ConnectionStatus.NetworkConnectionFail)
            {
                NetworkErrorView networkErrorWindow = new NetworkErrorView();
                networkErrorWindow.ShowDialog();
                Current.Shutdown(-1);
            }
}
我希望能够将其所有内容外包到库中包含的静态方法中。像这样:

private void ApplicationStart(object sender, StartupEventArgs e)
{
    NetWorkTools.MyExternalMethod();
}


但是我不知道怎么做,因为
MainWindow
只存在于我的主WPF项目中(以及
Current
)。所有其他方法/类都是从我的库中创建的,因此引用它们不会有问题。

在我看来,您正试图从另一个函数“启动”主窗口。这适用于所有“窗口”,首先创建它们的实例,然后显示它们

Mainwindow mw = new Mainwindow();
mw.show();

在我看来,您正试图从另一个函数“启动”主窗口。这适用于所有“窗口”,首先创建它们的实例,然后显示它们

Mainwindow mw = new Mainwindow();
mw.show();

如果希望它是通用的,请按如下方式执行:

private void ApplicationStart<TWindow>() where TWindow : Window, new()
{
   ...
   Application.Current.MainWindow = new TWindow();
   ...
}
private void ApplicationStart(),其中TWindow:Window,new()
{
...
Application.Current.MainWindow=新TWindow();
...
}

如果您希望它是通用的,请按如下方式操作:

private void ApplicationStart<TWindow>() where TWindow : Window, new()
{
   ...
   Application.Current.MainWindow = new TWindow();
   ...
}
private void ApplicationStart(),其中TWindow:Window,new()
{
...
Application.Current.MainWindow=新TWindow();
...
}

不清楚你在问什么。窗口是在库中创建还是在启动代码中创建?在OnStartup中,您说您已经有了一个主窗口(
此项目的主窗口
),那么该方法应该做什么呢?很抱歉,不够清晰。我想在我的库中创建它,而不是在OnStartup方法中。那么为什么该方法有一个参数(
此项目的主窗口
),这意味着什么?这只是为了让我的想法更清楚。我已经更正了我的帖子对不起,我仍然不知道你到底想完成什么。不清楚你问的是什么。窗口是在库中创建还是在启动代码中创建?在OnStartup中,您说您已经有了一个主窗口(
此项目的主窗口
),那么该方法应该做什么呢?很抱歉,不够清晰。我想在我的库中创建它,而不是在OnStartup方法中。那么为什么该方法有一个参数(
此项目的主窗口
),这意味着什么?这只是为了让我的想法更清楚。我已经更正了我的帖子抱歉,我仍然不知道您实际要完成什么。虽然此命令可能会回答此问题,但提供有关此代码为什么和/或如何回答此问题的其他上下文将提高其长期价值。虽然此命令可以回答该问题,但提供有关此代码为什么和/或如何回答该问题的其他上下文可以提高其长期价值。