チュートリアル: C# でシンプルな WPF アプリケーションを作成する
このチュートリアルを完了すると、Visual Studio でアプリケーションを開発するときに使用できるツール、ダイアログ ボックス、およびデザイナーの多くについて理解できるようになります。 "Hello, World" アプリケーションの作成、UI の設計、コードの追加、エラーのデバッグを行いながら、統合開発環境 (IDE) での作業について学習します。
前提条件
- Visual Studio をまだインストールしていない場合は、Visual Studio のダウンロード ページに移動し、無料試用版をインストールしてください。
- .NET デスクトップ開発ワークロードがインストールされていることを確認します。 この構成は、Visual Studio インストーラーで確認できます。
- このチュートリアルでは、.NET Framework または .NET Core を使用できます。 .NET Core の方がより新しく、より最新のフレームワークです。 .NET Core には、Visual Studio 2019 バージョン 16.3 以降が必要です。
WPF とは
WPF (または Windows Presentation Foundation) は、デスクトップ クライアント アプリケーションを作成する UI (ユーザー インターフェイス) フレームワークです。 WPF 開発プラットフォームでは、アプリケーション モデル、リソース、コントロール、グラフィックス、レイアウト、データ バインディング、ドキュメント、セキュリティなど、広範なアプリケーション開発機能をサポートします。
WPF は .NET の一部であるため、以前 ASP.NET や Windows フォームを使用して .NET でアプリケーションを構築したことがあれば、プログラミングには馴染みがあるでしょう。 WPF は、Extensible Application Markup Language XAML を使用して、アプリケーションのプログラミング用に、宣言型モデルを提供します。 詳細については、WPF .NET の概要に関する記事を参照してください。
IDE の構成
Visual Studio を起動するときに、スタート ウィンドウが最初に表示されます。 [コードなしで続行] を選択して、開発環境を開きます。 ツール ウィンドウ、メニューとツール バー、メイン ウィンドウ領域が表示されます。 ツール ウィンドウは、アプリケーション ウィンドウの左側と右側にドッキングされます。 上部には、検索ボックス、メニュー バー、標準ツールバーがあります。 ソリューションまたはプロジェクトを読み込むと、アプリケーション ウィンドウの中央スペースにエディターとデザイナーが表示されます。 アプリケーションを開発するときは、この中央の領域でほとんどの時間を費やします。
プロジェクトの作成
Visual Studio でアプリケーションを作成するには、最初にプロジェクトおよびソリューションを作成します。 この例では、Windows Presentation Foundation (WPF) プロジェクトを作成します。
Visual Studio を開きます。
スタート ウィンドウで、[新しいプロジェクトの作成] を選択します。
[新しいプロジェクトの作成] 画面で、「WPF」を検索し、 [WPF アプリケーション] を選択してから、 [次へ] を選択します。
次の画面で、プロジェクトに「HelloWPFApp」という名前を付けて、 [次へ] を選択します。
[追加情報] ウィンドウでは、ターゲット フレームワークとして [.NET Core 3.1] が既に選択されているはずです。 そうでない場合は [.NET Core 3.1] を選択します。 次に、 [作成] を選択します。
Visual Studio は HelloWPFApp というプロジェクトとソリューションを作成し、ソリューション エクスプローラーは各種ファイルを表示します。 WPF デザイナーには、MainWindow.xaml のデザイン ビューと XAML ビューが分割ビューで表示されます。 分割線をスライドして、それぞれのビューの表示範囲を増減できます。 ビジュアル ビューか XAML ビューの一方のみを表示することも選択できます。
Note
XAML (eXtensible Application Markup Language) について詳しくは、WPF のための XAML の概要に関するページをご覧ください。
プロジェクトは、作成後にカスタマイズできます。 これを行うには、[表示] メニューの [プロパティ ウィンドウ] を選択するか、または F4 キーを押します。 これで、アプリケーションのプロジェクト項目やコントロールなどの項目のオプションを表示および変更できます。
Visual Studio を開きます。
スタート ウィンドウで、 [新しいプロジェクトの作成] を選択します。
[新しいプロジェクトの作成] 画面で、「WPF」を検索し、 [WPF アプリケーション] を選択してから、 [次へ] を選択します。
次の画面で、プロジェクトに「HelloWPFApp」という名前を付けて、 [次へ] を選択します。
[追加情報] ウィンドウで、ターゲット フレームワークに対して [.NET 8.0] が選択されていることを確認します。 次に、 [作成] を選択します。
Visual Studio は HelloWPFApp というプロジェクトとソリューションを作成し、ソリューション エクスプローラーは各種ファイルを表示します。 WPF デザイナーには、MainWindow.xaml のデザイン ビューと XAML ビューが分割ビューで表示されます。 分割線をスライドして、それぞれのビューの表示範囲を増減できます。 ビジュアル ビューか XAML ビューの一方のみを表示することも選択できます。
Note
XAML (eXtensible Application Markup Language) について詳しくは、WPF のための XAML の概要に関するページをご覧ください。
プロジェクトは、作成後にカスタマイズできます。 これを行うには、[表示] メニューの [プロパティ ウィンドウ] を選択するか、または F4 キーを押します。 これで、アプリケーションのプロジェクト項目やコントロールなどの項目のオプションを表示および変更できます。
ユーザー インターフェイス (UI) のデザイン
デザイナーを開いていない場合は、MainWindow.xaml を選択し、Shift+F7 キーを押してデザイナーを開きます。
このアプリケーションに 3 種類のコントロール (TextBlock コントロールを 1 つ、RadioButton コントロールを 2 つ、Button コントロールを 1 つ) を追加します。
TextBlock コントロールを追加する
Ctrl+Q キーを押して検索ボックスを有効にし、「ツールボックス」と入力します。 結果リストから [表示] > [ツールボックス] を選択します。
[ツールボックス] で、 [コモン WPF コントロール] ノードを展開し、TextBlock コントロールを表示します。
TextBlock 項目を選択してデザイン サーフェイス上のウィンドウにドラッグし、TextBlock コントロールをデザイン サーフェイスに追加します。 ウィンドウの上部付近の中央にコントロールを配置します。 Visual Studio 2019 以降では、赤いガイドラインを使用してコントロールを中央揃えにすることができます。
ウィンドウは次の図のようになります。
XAML マークアップは、次の例のようになります。
<Grid> <TextBlock HorizontalAlignment="Left" Margin="387,60,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/> </Grid>
Ctrl+Q キーを押して検索ボックスを有効にし、「ツールボックス」と入力します。 結果リストから [表示] > [ツールボックス] を選択します。
[ツールボックス] で、 [コモン WPF コントロール] ノードを展開し、TextBlock コントロールを表示します。
TextBlock 項目を選択してデザイン サーフェイス上のウィンドウにドラッグし、TextBlock コントロールをデザイン サーフェイスに追加します。 ウィンドウの上部付近の中央にコントロールを配置します。 ガイドラインを使用して、コントロールを中央に配置できます。
ウィンドウは次の画像のようになります。
XAML マークアップは、次の例のようになります。
<Grid> <TextBlock HorizontalAlignment="Left" Margin="387,60,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/> </Grid>
テキスト ブロックのテキストをカスタマイズする
XAML ビューで、TextBlock のマークアップを探し、Text 属性を
TextBox
からSelect a message option and then choose the Display button.
に変更しますXAML マークアップは、次の例のようになります。
<Grid> <TextBlock HorizontalAlignment="Left" Margin="387,60,0,0" TextWrapping="Wrap" Text="Select a message option and then choose the Display button." VerticalAlignment="Top"/> </Grid>
必要に応じて、TextBlock をもう一度中央揃えし、Ctrl + S キーを押すか、[ファイル] メニュー項目を使って、変更を保存します。
次に、2 つの RadioButton コントロールをフォームに追加します。
オプション ボタンを追加する
[ツールボックス] で、RadioButton コントロールを探します。
RadioButton 項目を選択してデザイン サーフェイス上のウィンドウにドラッグし、RadioButto コントロールを 2 つデザイン サーフェイスに追加します。 TextBlock コントロールの下にボタンが並んで表示されるように、ボタンを移動します (ボタンを選択し、方向キーを使います)。 赤いガイドラインを使用してコントロールを配置します。
ウィンドウは、次のようになります。
左側の RadioButton コントロールの [プロパティ] ウィンドウで、 [Name] プロパティ ( [プロパティ] ウィンドウの一番上のプロパティ) を
HelloButton
に変更します。右側の RadioButton コントロールの [プロパティ] ウィンドウで、 [Name] プロパティを
GoodbyeButton
に変更し、変更を保存します。
次に、各 RadioButton コントロールの表示テキストを追加します。 次の手順では、RadioButton コントロールの [Content] プロパティを更新します。
[ツールボックス] で、RadioButton コントロールを探します。
RadioButton 項目を選択してデザイン サーフェイス上のウィンドウにドラッグし、RadioButto コントロールを 2 つデザイン サーフェイスに追加します。 TextBlock コントロールの下にボタンが並んで表示されるように、ボタンを移動します (ボタンを選択し、方向キーを使います)。 ガイドラインを使用して、コントロールを配置できます。
ウィンドウは、次のようになります。
左側の RadioButton コントロールの [プロパティ] ウィンドウで、 [Name] プロパティ ( [プロパティ] ウィンドウの一番上のプロパティ) を
HelloButton
に変更します。右側の RadioButton コントロールの [プロパティ] ウィンドウで、 [Name] プロパティを
GoodbyeButton
に変更し、変更を保存します。
次に、各 RadioButton コントロールの表示テキストを追加します。 次の手順では、RadioButton コントロールの [Content] プロパティを更新します。
各オプション ボタンの表示テキストを追加する
XAML で 2 つのラジオ ボタン
HelloButton
とGoodbyeButton
の Content 属性を"Hello"
と"Goodbye"
に更新してください。 XAML マークアップは次の例のようになります。<Grid> <TextBlock HorizontalAlignment="Left" Margin="252,47,0,0" TextWrapping="Wrap" Text="Select a message option and then choose the Display button." VerticalAlignment="Top"/> <RadioButton x:Name="HelloButton" Content="Hello" HorizontalAlignment="Left" Margin="297,161,0,0" VerticalAlignment="Top"/> <RadioButton x:Name="GoodbyeButton" Content="Goodbye" HorizontalAlignment="Left" Margin="488,161,0,0" VerticalAlignment="Top"/> </Grid>
チェックマークが既定で付けられるようにラジオ ボタンを設定する
この手順では、2 つのラジオ ボタンのいずれかが常に選択されるように、HelloButton に既定でチェックマークが付けられるように設定します。
XAML ビューで、HelloButton のマークアップを見つけます。
IsChecked 属性を追加し、True に設定します。 具体的には、
IsChecked="True"
を追加します。XAML マークアップは次の例のようになります。
<Grid> <TextBlock HorizontalAlignment="Left" Margin="252,47,0,0" TextWrapping="Wrap" Text="Select a message option and then choose the Display button." VerticalAlignment="Top"/> <RadioButton x:Name="HelloButton" Content="Hello" IsChecked="True" HorizontalAlignment="Left" Margin="297,161,0,0" VerticalAlignment="Top"/> <RadioButton x:Name="GoodbyeButton" Content="Goodbye" HorizontalAlignment="Left" Margin="488,161,0,0" VerticalAlignment="Top"/> </Grid>
最後に追加する UI 要素は、Button コントロールです。
Button コントロールを追加する
[ツールボックス] で、 Button コントロールを探し、デザイン サーフェイスの RadioButton コントロールの下に追加します。デザイン ビュー内のフォームにドラッグすると追加されます。 Visual Studio 2019 以降を使用している場合は、赤い線を使ってコントロールを中央揃えにすることができます。
XAML ビューで、Button コントロールの [Content] の値を
Content="Button"
からContent="Display"
に変更し、変更を保存します。ウィンドウは次の図のようになります。
XAML マークアップは次の例のようになります。
<Grid> <TextBlock HorizontalAlignment="Left" Margin="252,47,0,0" TextWrapping="Wrap" Text="Select a message option and then choose the Display button." VerticalAlignment="Top"/> <RadioButton x:Name="HelloButton" Content="Hello" IsChecked="True" HorizontalAlignment="Left" Margin="297,161,0,0" VerticalAlignment="Top"/> <RadioButton x:Name="GoodbyeButton" Content="Goodbye" HorizontalAlignment="Left" Margin="488,161,0,0" VerticalAlignment="Top"/> <Button Content="Display" HorizontalAlignment="Left" Margin="377,270,0,0" VerticalAlignment="Top" Width="75"/> </Grid>
[ツールボックス] で、 Button コントロールを探し、デザイン サーフェイスの RadioButton コントロールの下に追加します。デザイン ビュー内のフォームにドラッグすると追加されます。 ガイドラインを使用すると、コントロールを中央に配置しやすくなります。
XAML ビューで、Button コントロールの [Content] の値を
Content="Button"
からContent="Display"
に変更し、変更を保存します。ウィンドウは次のスクリーンショットのようになります。
XAML マークアップは次の例のようになります。
<Grid> <TextBlock HorizontalAlignment="Left" Margin="252,47,0,0" TextWrapping="Wrap" Text="Select a message option and then choose the Display button." VerticalAlignment="Top"/> <RadioButton x:Name="HelloButton" Content="Hello" IsChecked="True" HorizontalAlignment="Left" Margin="297,161,0,0" VerticalAlignment="Top"/> <RadioButton x:Name="GoodbyeButton" Content="Goodbye" HorizontalAlignment="Left" Margin="488,161,0,0" VerticalAlignment="Top"/> <Button Content="Display" HorizontalAlignment="Left" Margin="377,270,0,0" VerticalAlignment="Top" Width="75"/> </Grid>
Display ボタンにコードを追加する
このアプリケーションを実行すると、ユーザーがラジオ ボタンを選択した後で [Display] ボタンを選択したときに、メッセージ ボックスが表示されます。 1 つのメッセージ ボックスには Hello と表示され、もう 1 つには Goodbye と表示されます。 この動作を作成するために、MainWindow.xaml.cs の Button_Click
イベントにコードを追加します。
デザイン サーフェイスで、 [Display] ボタンをダブルクリックします。
MainWindow.xaml.cs が開き、
Button_Click
イベントにカーソルが表示されます。private void Button_Click(object sender, RoutedEventArgs e) { }
次のコードを入力します。
if (HelloButton.IsChecked == true) { MessageBox.Show("Hello."); } else if (GoodbyeButton.IsChecked == true) { MessageBox.Show("Goodbye."); }
アプリケーションを保存します。
このアプリケーションを実行すると、ユーザーがラジオ ボタンを選択した後で [Display] ボタンを選択したときに、メッセージ ボックスが表示されます。 1 つのメッセージ ボックスには Hello と表示され、もう 1 つには Goodbye と表示されます。 この動作を作成するために、MainWindow.xaml.cs の Button_Click
イベントにコードを追加します。
デザイン サーフェイスで、 [Display] ボタンをダブルクリックします。
MainWindow.xaml.cs が開き、
Button_Click
イベントにカーソルが表示されます。private void Button_Click(object sender, RoutedEventArgs e) { }
[表示] ボタンをダブルクリックすると、
Click="Button_Click"
が XAML に追加されます。XAML マークアップは次の例のようになります。
<Grid> <TextBlock HorizontalAlignment="Left" Margin="252,47,0,0" TextWrapping="Wrap" Text="Select a message option and then choose the Display button." VerticalAlignment="Top"/> <RadioButton x:Name="HelloButton" Content="Hello" IsChecked="True" HorizontalAlignment="Left" Margin="297,161,0,0" VerticalAlignment="Top"/> <RadioButton x:Name="GoodbyeButton" Content="Goodbye" HorizontalAlignment="Left" Margin="488,161,0,0" VerticalAlignment="Top"/> <Button Content="Display" HorizontalAlignment="Left" Margin="377,270,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/> </Grid>
次のコードを入力します。
if (HelloButton.IsChecked == true) { MessageBox.Show("Hello."); } else if (GoodbyeButton.IsChecked == true) { MessageBox.Show("Goodbye."); }
アプリケーションを保存します。
アプリケーションのデバッグとテスト
次に、アプリケーションをデバッグしてエラーを探し、両方のメッセージ ボックスが正しく表示されることをテストします。 以下の指示にデバッガーをビルドして起動する方法が示されていますが、詳細については、後で「WPF アプリケーション (WPF) のビルド」および「WPF のデバッグ」を参照することもできます。
MainWindow.xaml の名前を変更する
それでは、MainWindow に具体的な名前を付けましょう。 ソリューション エクスプローラーで、MainWindow.xaml を右クリックし、 [名前の変更] を選択します。 ファイルの名前を Greetings.xaml に変更します。
エラーの検出と修正
この手順では、前に MainWindow.xaml ファイルの名前を変更することで引き起こしたエラーを見つけます。
デバッグを開始し、エラーを見つける
F5 キーを押すか、 [デバッグ] 、 [デバッグの開始] の順に選択して、デバッガーを起動します。
[ブレーク モード] ウィンドウが表示されます。[出力] ウィンドウに、IOException が発生し、''リソース mainwindow.xaml が見つけられない'' ことが示されます。
[デバッグ]>[デバッグの停止] の順に選択し、デバッガーを停止します。
MainWindow.xaml の名前を Greetings.xaml に変更しましたが、このコードではアプリケーションのスタートアップ URI として MainWindow.xaml が指定されたままになっているため、プロジェクトを起動できません。
F5 キーを押すか、 [デバッグ] 、 [デバッグの開始] の順に選択して、デバッガーを起動します。
[ブレーク モード] ウィンドウが表示されます。[出力] ウィンドウに、IOException が発生し、''リソース mainwindow.xaml が見つけられない'' ことが示されます。
[デバッグ]>[デバッグの停止] の順に選択し、デバッガーを停止します。
このチュートリアルの最初で MainWindow.xaml の名前を Greetings.xaml に変更しましたが、このコードではアプリケーションのスタートアップ URI として MainWindow.xaml が指定されたままになっているため、プロジェクトを起動できません。
スタートアップ URI として Greetings.xaml を指定する
ソリューション エクスプローラーで、App.xaml ファイルを開きます。
StartupUri="MainWindow.xaml"
をStartupUri="Greetings.xaml"
に変更し、その変更を保存します。
省略可能な手順として、混乱を避けるために、この新しい名前と一致するようにアプリケーション ウィンドウのタイトルを変更します。
ソリューション エクスプローラーで、名前を変更したばかりの Greetings.xaml ファイルを開きます。
Window.Title プロパティの値を
Title="MainWindow"
からTitle="Greetings"
に変更し、その変更を保存します。
デバッガーを再度起動します (F5 を押します)。 以上で、アプリケーションの Greetings ウィンドウが表示されます。
アプリケーション ウィンドウを閉じ、デバッグを停止します。
ブレークポイントを使用してデバッグする
ブレークポイントをいくつか追加することで、デバッグ中にコードをテストできます。 ブレークポイントを追加するには、 [デバッグ]>[ブレークポイントの設定/解除] の順に選択するか、中断するコード行の横のエディター ウィンドウの左端の余白をクリックするか、F9 キーを押します。
ブレークポイントを追加する
Greetings.xaml.cs を開き、
MessageBox.Show("Hello.")
という行を選択します。[デバッグ]、 [ブレークポイントの設定/解除]の順に選択して、メニューからブレークポイントを追加します。
コード行の横の、エディター ウィンドウの左端の余白部分に、赤い円が表示されます。
MessageBox.Show("Goodbye.")
という行を選択します。F9 キーを押してブレークポイントを追加し、F5 キーを押してデバッグを開始します。
[Greetings] ウィンドウで、 [Hello] オプション ボタンを選択してから、 [Display] ボタンを選択します。
MessageBox.Show("Hello.")
という行が黄色で強調表示されます。 IDE の下部では、[自動変数]、[ローカル]、[ウォッチ] の各ウィンドウが左側にまとめてドッキングされ、[呼び出し履歴]、[ブレークポイント]、[例外設定]、[コマンド]、[イミディエイト]、[出力] の各ウィンドウが右側にまとめてドッキングされます。メニュー バーで [デバッグ]>[ステップ アウト] の順に選択します。
アプリケーションの実行が再開され、メッセージ ボックスに "Hello" と表示されます。
メッセージ ボックスの [OK] を選択して閉じます。
[Greetings] ウィンドウで、 [Goodbye] オプション ボタンを選択し、 [Display] ボタンを選択します。
MessageBox.Show("Goodbye.")
という行が黄色で強調表示されます。F5 キーを押してデバッグを続行します。 メッセージ ボックスが表示されたら、メッセージ ボックスの [OK] を選択して、閉じます。
アプリケーション ウィンドウを閉じ、デバッグを停止します。
メニュー バーで、 [デバッグ]>[すべてのブレークポイントを無効にする] の順に選択します。
Greetings.xaml.cs を開き、
MessageBox.Show("Hello.")
という行を選択します。[デバッグ]、 [ブレークポイントの設定/解除]の順に選択して、メニューからブレークポイントを追加します。
コード行の横の、エディター ウィンドウの左端の余白部分に、赤い円が表示されます。
MessageBox.Show("Goodbye.")
という行を選択します。F9 キーを押してブレークポイントを追加し、F5 キーを押してデバッグを開始します。
[Greetings] ウィンドウで、 [Hello] オプション ボタンを選択してから、 [Display] ボタンを選択します。
MessageBox.Show("Hello.")
という行が黄色で強調表示されます。 IDE の下部では、[自動変数]、[ローカル]、[ウォッチ] の各ウィンドウが左側にまとめてドッキングされ、[呼び出し履歴]、[ブレークポイント]、[例外設定]、[コマンド]、[イミディエイト]、[出力] の各ウィンドウが右側にまとめてドッキングされます。メニュー バーで [デバッグ]>[ステップ アウト] の順に選択します。
アプリケーションの実行が再開され、メッセージ ボックスに "Hello" と表示されます。
メッセージ ボックスの [OK] を選択して閉じます。
[Greetings] ウィンドウで、 [Goodbye] オプション ボタンを選択し、 [Display] ボタンを選択します。
MessageBox.Show("Goodbye.")
という行が黄色で強調表示されます。F5 キーを押してデバッグを続行します。 メッセージ ボックスが表示されたら、メッセージ ボックスの [OK] を選択して、閉じます。
アプリケーション ウィンドウを閉じ、デバッグを停止します。
メニュー バーで、 [デバッグ]>[すべてのブレークポイントを無効にする] の順に選択します。
UI 要素の表現を表示する
実行中のアプリで、ウィンドウの上部にウィジェットが表示されます。 このウィジェットは、いくつかの便利なデバッグ機能にすばやくアクセスできるランタイム ヘルパーです。 最初のボタン [ライブ ビジュアル ツリーに移動する] を選択します。 ウィンドウにページのすべてのビジュアル要素が含まれるツリーが表示されます。 ノードを展開して、追加したボタンを見つけます。
アプリケーションのリリース バージョンのビルド
すべてが機能することを確認したら、アプリケーションのリリース ビルドを準備できます。
メイン メニューで、 [ビルド]>[ソリューションのクリーン] の順に選択して、前のビルドで作成された中間ファイルと出力ファイルを削除します。 この手順は必須ではありませんが、デバッグ ビルドの出力がクリーンアップされます。
ツールバー上のドロップダウン コントロール (現時点で [デバッグ] になっている) を使って、HelloWPFApp のビルド構成を [デバッグ] から [リリース] に変更します。
[ビルド]>[ソリューションのビルド] を選択して、ソリューションをビルドします。
これでこのチュートリアルは完了です。 ビルドした .exe は、ソリューションとプロジェクトのディレクトリ (...\HelloWPFApp\HelloWPFApp\bin\Release) の下にあります。
次の手順
これでこのチュートリアルは完了です。 さらに詳しく学習するには、引き続き以下のチュートリアルをご覧ください。