SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

.NET Core 3で始めるWPFアプリ開発

.NET Core 3で始めるWPFアプリ開発――Hello, WPF!

.NET Core 3で始めるWPFアプリ開発 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

デバッグ実行とホットリロード

 それでは[F5]キーを押してデバッグ実行してみましょう(次の画像)。

デバッグ実行中のWPFアプリとVisual Studio 2019
デバッグ実行中のWPFアプリとVisual Studio 2019

 おっと、"Hello, world !"と表示されましたけど、この章のタイトルには"Hello, WPF !"と書いたような気がします。修正しましょう。デバッグ実行したまま、XAMLデザイナーでworldWPFに書き換えてみてください(次の画像)。デバッグ実行したままで、ですよ!

デバッグ実行中にXAMLを書き換える
デバッグ実行中に"world"を"WPF"に書き換えている途中

 デバッグ実行中にXAMLを書き換えると、その場で反映されました。これを「ホットリロード」と呼んでいます。画面のデザインは、だいたいはXAMLデザイナーのプレビューで足ります。実行中しか見えないUIとか、デバッグ中に気付いたUIの修正などは、こうやってとりあえずデバッグ中にXAMLを書き換えてみましょう。ホットリロードがカバーできる範囲の修正であれば、その場で反映されます。

 ここまでのコードは、GitHubのHelloWorldAppで公開しています。

XAML構成要素のさまざまな呼び方

 ここで、XAMLの構成要素の呼び方を簡単に説明しておきます。「MainWindow.xaml」ファイルの内容は、次のコードのようになっています。

MainWindow.xaml(再掲)
<Window x:Class="HelloWorldApp.MainWindow"
        ……省略……
        Title="MainWindow" Height="450" Width="800">
  <Grid>
    <TextBlock FontSize="64">Hello, WPF !</TextBlock>
  </Grid>
</Window>

 XAML(eXtensible Application Markup Language)は、XMLの一種です。ですが、コントロールの組み立てを記述する言語でもあります。そのため、XAMLの各部は、XMLの用語で呼ばれたり、コントロールの用語で呼ばれたりします。

  • <>:タグ。<……>は開始タグ、</ ……>は終了タグ、<…… />(上のコード例にはない)は空要素タグと呼ぶ
  • WindowGridTextBlock:要素名(XML)/型名、クラス名、構造体名(コントロール)
  • x::名前空間プレフィックス
  • ClassTitleHeightWidthFontSize:属性(XML)/プロパティ(コントロール)
  • HelloWorldApp.MainWindowMainWindow45080064:属性値(XML)/プロパティ値(コントロール)
  • Hello, WPF !:要素の内容(XML)/コンテンツ、既定のプロパティの値(コントロール)

 XAMLの詳細については、別の回で解説する予定です。ここでは「こんな呼び方をするんだ」とだけ理解してください。この連載でも、例えば「属性」と書いたり「プロパティ」と書いたりします。

 最後の「既定のプロパティの値」だけは、少し説明しておきます。コントロールには既定のプロパティが定められています。TextBlockコントロールの既定のプロパティはTextプロパティなので、次のコードの2つの要素は同じ意味になります。

TextBlockコントロールの既定のプロパティはTextプロパティ
<TextBlock FontSize="64">Hello, WPF !</TextBlock>
<TextBlock FontSize="64" Text="Hello, WPF !" />

 また、Gridコントロールの既定のプロパティはChildrenプロパティです。先のMainWindow.xamlのコードでGridコントロールのコンテンツとしてTextBlockコントロールが書いてあるのは、GridコントロールのChildrenプロパティにTextBlockコントロールをセットしているという意味になります。そして、そのGridコントロールは、Windowコントロールの既定のプロパティであるContentプロパティにセットされています。

 なお、与えるコンテンツの型によって既定のプロパティが変わることもあります。例えば、TextBlockコントロールのコンテンツに文字列ではなくInlineCollectionオブジェクトというものを与えると、それはTextプロパティではなくInlineプロパティにセットされます。

 コンテンツがコントロールのどのプロパティにセットされるのかは、上述のようにさまざまなケースがあって難しそうですが、おおむね「コンテンツ=中身」という直感通りの動きをしてくれますから心配はいりません。

次のページ
コントロールとC#コードの対話

関連リンク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
.NET Core 3で始めるWPFアプリ開発連載記事一覧
この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11809 2019/12/23 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング