このエントリーをはてなブックマークに追加


WPFアプリ(.NET Framework)で起動時にMainWindowを制御する方法

プロジェクトの作成で、WPFアプリを選択し、ビルドすると自動生成されたMainWindowが表示されます。
このMainWindowの表示をさせない(=プログラムで制御)する方法を以下に記します。 ウインドウ表示前に何かの処理をして表示・非表示を制御するようなときに使えると思います。

動作確認環境

  • Windows 10 ver. 21H1
  • Visual Studio 2019
    • WPFアプリ(.NET Framework)
  • .NET Framework 4.7.2

修正箇所

修正箇所を以下に記します。

C#

XAML,C#ソースを修正します。

App.xaml

StartupUriを削除します。

  • 修正前
    <Application x:Class="NotDispMainWindowCS.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:プロジェクト名"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
             
        </Application.Resources>
    </Application>
  • 修正後
    <Application x:Class="NotDispMainWindowCS.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:プロジェクト名">
        <Application.Resources>
             
        </Application.Resources>
    </Application>

App.xaml.cs

  • 修正前
       /// <summary>
       /// App.xaml の相互作用ロジック
       /// </summary>
       public partial class App : Application
       {
       }
  • 修正後
    OnStartup, OnExitを実装します。
    これにより、OnStartupでウインドウの表示制御をw.Show()のようにできるようになります。
    何か判定で終了させる場合は、base.Shutdown を呼び出せばよいでしょう。
       /// <summary>
       /// App.xaml の相互作用ロジック
       /// </summary>
       public partial class App : Application
       {
           protected override void OnStartup(StartupEventArgs e)
           {
               base.OnStartup(e);
               var w = new MainWindow();
               w.Show();
           }
    
           protected override void OnExit(ExitEventArgs e)
           {
               base.OnExit(e);
           }
       }

VB(Visual Basic)

XAML,VBソースを修正します。

Application.xaml

StartupUriを削除します。

  • 修正前
    <Application x:Class="Application"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:プロジェクト名"
        StartupUri="MainWindow.xaml">
        <Application.Resources>
            
        </Application.Resources>
    </Application>
  • 修正後
    <Application x:Class="Application"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:プロジェクト名">
        <Application.Resources>
            
        </Application.Resources>
    </Application>

Application.xaml.vb

  • 修正前
    Class Application
    
        ' Startup、Exit、DispatcherUnhandledException などのアプリケーション レベルのイベントは、
        ' このファイルで処理できます。
    
    End Class
  • 修正後
    OnStartup, OnExitを実装します。
    これにより、OnStartupでウインドウの表示制御をw.Show()のようにできるようになります。
    何か判定で終了させる場合は、base.Shutdown を呼び出せばよいでしょう。
    Class Application
    
        Protected Overrides Sub OnStartup(e As StartupEventArgs)
            MyBase.OnStartup(e)
            Dim w = New MainWindow()
            w.Show()
        End Sub
    
        Protected Overrides Sub OnExit(e As ExitEventArgs)
            MyBase.OnExit(e)
        End Sub
    
    End Class

以上、WPFアプリでMainWindowの表示/非表示をプログラムで制御する方法でした。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-16 (木) 09:17:44