.NET Core 3.1とVisual Studioでデスクトップアプリ

# ■はじめに

`.NET Core 3.1`と`Visual Studio`で画面デザイナを軽く触ってみます。

![net31gui16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/99560099-3540-d682-ae3a-656c9928e583.png)

# ■対象読者

.NET Coreで初めてGUIやる人。

# ■環境

* Windows 10
* .NET Core 3.1
* Visual Studio 2019

# ■準備

Visual Studio 2019のバージョンが16.4未満ならアップデートしておきます。

![net31gui01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/33de7c4a-e1d4-b86b-c0d0-fd5777395e08.png)

# ■プロジェクトの作成

[新しいプロジェクトの作成]を選択します。
![net31gui02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/a1b53dcb-d946-26a2-aa6d-cd373a0dc06c.png)

言語に`C#`、プラットフォームに`Windows`を選択し、検索ボックスに`wpf`を入力します。
一覧から`WPF App (.NET Core)`を選択し、[次へ]を選択します。
![net31gui03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/8462f7a4-03cc-a028-7bb2-a51f8af1a72c.png)

プロジェクト名を入力し、[作成]を選択します。
![net31gui04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/5c1eb882-dd97-4048-9264-467baddf55e6.png)

![net31gui05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/cae1015a-6b54-a6e0-26a2-7dee20b13ce3.png)

# ■画面作成

## ◇画面分割

まず画面を左右に分割します。
Windowの白い部分（Grid）を選択状態にし、タイトルバー近辺で中央より右側にマウスカーソルをポイントします。
分割できる部分の上にカーソルが乗ると`+`マークが出るのでクリックします。
![net31gui06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/347b730b-cecf-3bec-3d76-85fe4021cfb7.png)

Gridが分割されました。
![net31gui07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/e68655c9-264b-d9b4-e4ea-9e27c289543f.png)

## ◇コンテナコントロールの追加

分割したGridの左側に`Viewbox`を追加します。
ツールバーの検索ボックスに`v`を入力してフィルタリングし、`Viewbox`をドラッグ＆ドロップします。
![net31gui08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/cd1dfe83-907f-850a-7726-c1b31f83193f.png)

分割したGridの右側に`StackPanel`をドラッグ＆ドロップします。
![net31gui09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/d9f63814-7576-dac2-65bf-8da9b8d23339.png)

## ◇コントロールの追加

左側（Viewbox）に`Calendar`をドラッグ＆ドロップします。
![net31gui10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/d6daa4cd-a13a-6340-bda1-33654f252a4b.png)

右側（StackPanel）に`Button`を3回、ドラッグ＆ドロップします。
![net31gui11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/343779ff-d3e7-4d16-fd29-c4cd300c2b1d.png)

## ◇ボタンクリック時の処理作成

まずカレンダーに名前を付けます。
カレンダーを選択し、プロパティウィンドウの[名前]に`cal`を入力します。
![net31gui12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/0ced62a6-28cc-fa7a-525f-d0e57c7f7a16.png)

1番上のボタンをダブルクリックすると自動的にイベントハンドラが作成され、コード編集用のタブに飛ぶので以下を入力します。

```CSharp
private void Button_Click(object sender, RoutedEventArgs e)
{
    // カレンダーで選択した日付の年を表示
    MessageBox.Show(cal.SelectedDate?.ToString("yyyy年"));
}
```

2番目、3番目も同様にコードを記述します。

```CSharp
private void Button_Click_1(object sender, RoutedEventArgs e)
{
    // カレンダーで選択した日付の月を表示
    MessageBox.Show(cal.SelectedDate?.ToString("MM月"));
}

private void Button_Click_2(object sender, RoutedEventArgs e)
{
    // カレンダーで選択した日付の日を表示
    MessageBox.Show(cal.SelectedDate?.ToString("dd日"));
}
```

![net31gui13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/32cb6589-272a-500f-c63b-98e0f47d2df1.png)

## ◇その他プロパティ設定

ウィンドウにサイズ変更グリップを表示し、サイズ変更しやすくします。
タイトルバー部分をクリックしてWindowを選択状態にし、プロパティウィンドウのResizeModeで`CanResizeWithGrip`を選択します。
![net31gui14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/f2178198-573b-3cc6-d71e-d14f9878c8b4.png)

# ■実行してみる
緑の三角ボタンを押してプログラムを起動します。
![net31gui40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/2985529f-c7b5-4033-d4ba-afe2a4d36244.png)

右下のグリップをつかんでウィンドウサイズを変えてみます。
![net31gui15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/3c7c9aa8-ccfa-2f42-54eb-dee231c827c4.png)

![net31gui16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/99560099-3540-d682-ae3a-656c9928e583.png)

ボタンを押してみます。
まだカレンダーで日付を選択していないため、メッセージは空です。
![net31gui17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/621c3e35-ac1d-9b60-afab-3a479c9bbf79.png)

カレンダーで適当に日付を選択してからボタンを押すと今度は表示されました。
![net31gui18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142879/e53c7d40-b545-0f3b-110d-ac18b6420c7d.png)

# ■続き

[.NET Core 3.1 GUIコントロール](https://qiita.com/Kosen-amai/items/2835b1a146f30a5565bc)