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

时间:2019-04-09 14:28:45

标签: c# wpf generics types

我目前在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)。所有其他方法/类都是从我的库中创建的,因此引用它们不会有问题。

2 个答案:

答案 0 :(得分:1)

正如我所看到的,您正在尝试从另一个功能“启动”主窗口。首先,为所有“ Windows”创建一个实例,然后再显示它们,这对所有Windows都适用。

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

答案 1 :(得分:1)

如果您希望它是通用的,则可以这样做:

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