Prism WPF で サブウィンドウを全画面表示

#プロジェクタ投影用サブウィンドウを生成したい。Prismで！

簡単そうだけど意外とやり方が分かりませんでした。

メインウィンドウは普通のGUIなので枠が有ったりして良いんですが、
プロジェクタ投影に際して

+ 枠無し
+ 最大化
+ タスクバー無し

が必要になりました。
WPFで直接いじる分には↓の様なWindowを作れば良さそうです。

```xml
<Window ～
 WindowStyle="None" WindowState="Maximized"/>
     <WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="{x:Static SystemParameters.CaptionHeight}"
                      ResizeBorderThickness="{x:Static SystemParameters.WindowResizeBorderThickness}" 
                      UseAeroCaptionButtons="False"/>
    </WindowChrome.WindowChrome>
```

元々のGUI画面は必要なのでこれをサブWindowとして表示したいのですが、
あれ？っと躓いてしまいました。

とりあえず今回の対処は以下のようにしました。

#前提

Prism templete pack導入済み VisualStudioを使って、テンプレートを「Prism Blank App(WPF)」でプロジェクト新規作成した状態から始めます。


.Net Framework 4.8、Select ContainerでUnityを選びました。

空のプロジェクトはNugetパッケージが無いのでビルドを通さないとPrism上手く認識してくれません。
とりあえずビルドしてみましょう。

この時点でPrismは7.2.0.1422でした。

#サブWindowを出す変更

##サブWindowの作成
Viewsに新規追加でPrismWindow(WPF)を追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241416/d0e30e2f-1aef-935d-c45d-32427f6448b4.png)

PrismWindow1.xamlを全画面表示に設定しました。

```xml:PrismWindow1.xaml
<Window x:Class="BlankApp1.Views.PrismWindow1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:prism="http://prismlibrary.com/"             
             prism:ViewModelLocator.AutoWireViewModel="True"
             WindowStyle="None" WindowState="Maximized">
    <WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="{x:Static SystemParameters.CaptionHeight}"
                      ResizeBorderThickness="{x:Static SystemParameters.WindowResizeBorderThickness}" 
                      UseAeroCaptionButtons="False"/>
    </WindowChrome.WindowChrome>
    <Grid>
            
    </Grid>
</Window>

```


##App.xaml.csの変更

今回は起動時から終了時までずっと表示したいので、App.xaml.csのCreateShellで生成しました。


```C#:App.xaml.cs
using BlankApp1.Views;
using Prism.Ioc;
using Prism.Modularity;
using Prism.Regions;
using System.Windows;

namespace BlankApp1
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App
    {
        protected override Window CreateShell()
        {
            var subwindow = new PrismWindow1();
            subwindow.Show();
            RegionManager.SetRegionManager(subwindow, Container.Resolve<IRegionManager>());
            return Container.Resolve<MainWindow>();
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {

        }
    }
}


```



##App.xamlの変更

MainWindowが閉じたら全て終了したいので```ShutdownMode="OnMainWindowClose"```を設定します。

```xml:App.xaml
<prism:PrismApplication x:Class="BlankApp1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:prism="http://prismlibrary.com/"
             xmlns:local="clr-namespace:BlankApp1"
             ShutdownMode="OnMainWindowClose">
    <Application.Resources>
         
    </Application.Resources>
</prism:PrismApplication>

```

#とりあえず目的は達成
Debug実行とかすれば真っ白枠無しタスクバーまで隠すサブウィンドウとメイン画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241416/3995c500-08ed-08fb-e14d-37b3e3de4f50.png)


果たしてこれでいいのか？と言う疑念はありますが・・・。