Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

はじめに

これは、Visual Basic Advent Calendar 2020の6日目の記事となります。
前回記事で「.NET 5 + VB でも WinForms がしたい!」で、Windows フォームアプリケーションをやりましたので、WPF アプリケーションを今回やります。

昨年に「.NET Core 3.x + VB でも Wpf がしたい!」という記事を書きました。
当時はC#のプロジェクトとVBのプロジェクトを書き換えるという方法で実現させました。

テンプレートにVBがない

.NET 5になり、Windows Forms App(.NET)はプロジェクト テンプレートに追加されたのに、WPF App (.NET) がプロジェクト テンプレートにありません。C#にはもちろんあります。
VBorCsharpIDEテンプレート.png

Visual Basic 2020年の振り返り」のコメント欄にて、@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

環境

  • Visual Studo 2019 Version 16.8.0
  • .NET 5

プロジェクトの作成

テンプレートはないですが、下記のコマンドで作成することはできます。
プロジェクト名を「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

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

ソースコード

VBWpfApp2.png

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

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"をセットします。

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"がセットされました。

最後に

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

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

yaju
静岡県島田市在住ののシニアSE(元Microsoft MVP 2010-2012)がコンピューター、機械学習、Unity、数学について考える。
http://yaju3d.hatenablog.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away