デバッグ実行とホットリロード
それでは[F5]キーを押してデバッグ実行してみましょう(次の画像)。
おっと、"Hello, world !"と表示されましたけど、この章のタイトルには"Hello, WPF !"と書いたような気がします。修正しましょう。デバッグ実行したまま、XAMLデザイナーでworld
をWPF
に書き換えてみてください(次の画像)。デバッグ実行したままで、ですよ!
デバッグ実行中にXAMLを書き換えると、その場で反映されました。これを「ホットリロード」と呼んでいます。画面のデザインは、だいたいはXAMLデザイナーのプレビューで足ります。実行中しか見えないUIとか、デバッグ中に気付いたUIの修正などは、こうやってとりあえずデバッグ中にXAMLを書き換えてみましょう。ホットリロードがカバーできる範囲の修正であれば、その場で反映されます。
ここまでのコードは、GitHubのHelloWorldAppで公開しています。
XAML構成要素のさまざまな呼び方
ここで、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の用語で呼ばれたり、コントロールの用語で呼ばれたりします。
-
<
/>
:タグ。<……>
は開始タグ、</ ……>
は終了タグ、<…… />
(上のコード例にはない)は空要素タグと呼ぶ -
Window
/Grid
/TextBlock
:要素名(XML)/型名、クラス名、構造体名(コントロール) -
x:
:名前空間プレフィックス -
Class
/Title
/Height
/Width
/FontSize
:属性(XML)/プロパティ(コントロール) -
HelloWorldApp.MainWindow
/MainWindow
/450
/800
/64
:属性値(XML)/プロパティ値(コントロール) -
Hello, WPF !
:要素の内容(XML)/コンテンツ、既定のプロパティの値(コントロール)
XAMLの詳細については、別の回で解説する予定です。ここでは「こんな呼び方をするんだ」とだけ理解してください。この連載でも、例えば「属性」と書いたり「プロパティ」と書いたりします。
最後の「既定のプロパティの値」だけは、少し説明しておきます。コントロールには既定のプロパティが定められています。TextBlockコントロールの既定のプロパティはTextプロパティなので、次のコードの2つの要素は同じ意味になります。
<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プロパティにセットされます。
コンテンツがコントロールのどのプロパティにセットされるのかは、上述のようにさまざまなケースがあって難しそうですが、おおむね「コンテンツ=中身」という直感通りの動きをしてくれますから心配はいりません。