.NET 5 + VB でも Wpf がしたい！

# はじめに
これは、[Visual Basic Advent Calendar 2020](https://qiita.com/advent-calendar/2020/vb)の6日目の記事となります。
前回記事で「[.NET ５ + VB でも WinForms がしたい！](https://qiita.com/yaju/items/b3f99b828a3d10125bb7)」で、Windows フォームアプリケーションをやりましたので、WPF アプリケーションを今回やります。

昨年に「[.NET Core 3.x + VB でも Wpf がしたい！](https://qiita.com/yaju/items/23e108ad2e1c49962f27)」という記事を書きました。
当時はC#のプロジェクトとVBのプロジェクトを書き換えるという方法で実現させました。

# テンプレートにVBがない
.NET 5になり、Windows Forms App(.NET)はプロジェクト テンプレートに追加されたのに、WPF App (.NET) がプロジェクト テンプレートにありません。C#にはもちろんあります。
![VBorCsharpIDEテンプレート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/58c8c915-5765-4106-3df3-e21f8722c8f8.png)

「[Visual Basic 2020年の振り返り](https://qiita.com/yaju/items/b1c58162eb634fd58619)」のコメント欄にて、@tfukumori さんから下記の情報をいただきました。

>こちらを見ると、Visual Basicでの.NET 5.0のWPFについて記載がありました。
https://docs.microsoft.com/ja-jp/dotnet/core/dotnet-five#visual-basic-updates
>
>以下のコマンドでVisual Basicの.NET 5.0のWPFのプロジェクトが作成され、Visual Studio 2019で開いて実行できることは確認できました。
>
>dotnet new wpf -lang VB
>
>IDEからVisual Basic の.NET 5のWPFプロジェクトを追加できないことに対して、Microsoftのデベロッパーコミュニティで報告はされているようです。
https://developercommunity.visualstudio.com/content/problem/1254553/net-wpf-visual-basic-template.html

## テンプレート追加
【2021/08/21追記】
Visual Studo 2019 Version 16.10.0に更新しました。※Version 16.09.0の時は未確認です。
WPF アプリケーションがプロジェクト テンプレートに追加されているのを確認しました。
赤枠が.NET 5、青枠が.NET Frameworkです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/b8c04442-11dc-1aff-5c8d-95e8cb2a06a3.png)

# 環境
* Visual Studo 2019 Version 16.8.0→16.10.0(2021/08/21)
* .NET ５

# プロジェクトの作成
テンプレートはないですが、下記のコマンドで作成することはできます。
プロジェクト名を「VBWpfApp」で作成しました。

```
dotnet new wpf -n VBWpfApp -lang VB
```

## 生成結果
```
>dotnet new wpf -n VBWpfApp -lang VB

.NET 5.0 へようこそ!
---------------------
SDK バージョン: 5.0.100

テレメトリ
---------
.NET ツールは、エクスペリエンスの向上のために利用状況データを収集します。データは Microsoft によって収集され、コミュニティと共有されます。テレメトリをオプトアウトするには、好みのシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1'  または 'true' に設定できます。

.NET CLI ツールのテレメトリの詳細をご覧ください: https://aka.ms/dotnet-cli-telemetry

----------------
ASP.NET Core の HTTPS 開発証明書をインストールしました。
証明書を信頼するには、'dotnet dev-certs https --trust' (Windows および macOS のみ) を実行します。
HTTPS の詳細については、https://aka.ms/dotnet-https を参照してください
----------------
最初のアプリを作成するには、https://aka.ms/dotnet-hello-world を参照してください
最新情報については、https://aka.ms/dotnet-whats-new を参照してください
ドキュメントを探索するには、https://aka.ms/dotnet-docs を参照してください
GitHub で問題の報告とソースの検索を行うには、https://github.com/dotnet/core を参照してください
'dotnet --help' を使用して使用可能なコマンドを確認するか、https://aka.ms/dotnet-cli にアクセスしてください
--------------------------------------------------------------------------------------
Getting ready...
The template "WPF Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on VBWpfApp\VBWpfApp.vbproj...
  復元対象のプロジェクトを決定しています...
  C:\Workspace\source\repos\VBWpfApp\VBWpfApp.vbproj を復元しました (96 ms)。
Restore succeeded.
```

![VBWpfApp1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/64fa8ef5-b31f-d4cf-8636-85e1022544d6.png)

※キャプチャ画像のプロジェクト名が「VBWpfAp」と最後pが足りません。記事を書く時に間違いに気がつきました。

# ソースコード
![VBWpfApp2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/0982fc4b-521c-6030-384e-1c308795a336.png)

テキストボックスとボタンを配置した画面になります。

```vb:MainWindow.xaml
<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:VBWpfApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="280" Width="430">
    <Grid>
        <TextBox x:Name="testText" Margin="5,66,5,0" Text="TextBox" TextWrapping="Wrap" VerticalAlignment="Top" Height="22"/>
        <Button Content="Button" HorizontalAlignment="Left" Height="27" Margin="162,135,0,0" VerticalAlignment="Top" Width="96" RenderTransformOrigin="0.467,-0.146" Click="Button_Click"/>

    </Grid>
</Window>
```

ボタンイベントでテキストボックスに"Hello! .NET 5"をセットします。

```vb:MainWindow.xaml.vb
Class MainWindow
    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        testText.Text = "Hello! .NET 5"
    End Sub
End Class
```

# 結果
ボタンをクリックすると、テキストボックスに"Hello! .NET 5"がセットされました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14053/09db1f64-7b59-ae89-6e6a-0fa76d08ff39.png" width=50%>

# 最後に
IDEからVisual Basic の.NET 5のWPFプロジェクトを追加できないことに対して、Microsoftのデベロッパーコミュニティで報告はされているので、そのうち追加されると思います。→Version 16.10.0で追加されているのを確認しました。
https://developercommunity.visualstudio.com/content/problem/1254553/net-wpf-visual-basic-template.html

なんで、忘れられてしまったんでしょう、Microsoftさんしっかりしてくださいよ。