#author("2021-09-16T09:17:44+09:00","","")
#navi(../)

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

#contents
#htmlinsert(windev-top.html)

* 動作確認環境 [#ud097d1a]
- Windows 10 ver. 21H1
- Visual Studio 2019
-- WPFアプリ(.NET Framework)
- .NET Framework 4.7.2

* 修正箇所 [#o1f422c3]
修正箇所を以下に記します。

** C# [#fd9ce6df]
XAML,C#ソースを修正します。

*** App.xaml [#n5270936]
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 [#q6a9e7a9]
- 修正前
    /// <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) [#y00b28ed]
XAML,VBソースを修正します。

*** Application.xaml [#v8989a73]
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 [#u030eb26]
- 修正前
 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の表示/非表示をプログラムで制御する方法でした。

#htmlinsert(windev-btm.html)


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS