4

App.xaml.cs に次のコードがあります。

private void App_Start(object sender, StartupEventArgs e)
{
  if ( CompletedInstall())
  {
    //using show to allow for pacifier if loading is slow
    var manager = new WINServiceConfig();
    MainWindow = manager;
    manager.ShowDialog();
  }
}

private bool CompletedInstall()
{
    var window = new Initialize();
    window.ShowDialog();
    return window.DoLaunchManager;
}

および App.xaml の以下

<Application x:Class="Manager.App"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Startup="App_Start">

CompletedInstall()をチェックする行をコメントアウトすると、manager.ShowDialog()が正常に動作し、構成ウィンドウが表示されます。CompletedInstall()が呼び出されると、 manager.ShowDialog() への呼び出しは、ウィンドウを表示せずにすぐに戻ります。メイン ウィンドウを追加したのは、どこかでアプリが 1 つのウィンドウだけを表示する必要があると判断したためです。

CompletedInstall を呼び出す前にメイン ウィンドウを設定することで回避策を見つけました

        private void App_Start(object sender, StartupEventArgs e)
        {
          var manager = new WINServiceConfig();
          MainWindow = manager;

          if (CompletedInstall())
          {
            manager.ShowDialog();
          }

しかし、前提条件が満たされていることを期待できないため、その用途に基づいて WINServiceConfig (具体的にはコンストラクター) を開発する必要があります。これは悪い形です。この問題を回避するために他に何ができますか?

ダミーウィンドウ?それは最良の答えとは言えません。それをできる??

4

1 に答える 1

6

ShutdownMode を OnExplicitShutdown に設定する必要があります (少なくとも最初のダイアログを表示している間)。

于 2010-11-17T15:18:51.050 に答える