Programming Windows Phone 7
Chapter 1: Hello, Windows Phone 7
The Standard Silverlight Files (p10)
スケルトンファイルの組が二つある。App.xaml と App.xaml.cs という組と MainPage.xaml と MainPage.xaml.cs という組の二つ。xaml は Extensible Application Markup Language (XAML) で、zammel と発音する。cs は C# のこと。 cs ファイルは xaml ファイルに関連付けられている。
App.xaml.cs には、プロジェクト名と同じネームスペースで、Silverlight の Application を拡張する App クラスが定義される。
namespace SilverlightHelloPhone
{
public partial class App : Application
{
public App()
{
...
InitializeComponent();
...
}
...
}
}
アプリケーションの初期化、起動、終了等のアプリケーション全体の処理はここに記述する。
App.xaml のほうは次のようになる。
<Application
x:Class="SilverlightHelloPhone.App"
...>
...
</Application>
x:Class で指定されたクラスが、Silverlight の Application クラスを拡張したクラスであるという意味になる。
Visual Studio はコンパイル時に App.xaml をパースし、App.g.cs を生成する。g は generated を意味する。App.g.cs は \obj\Debug サブディレクトリに作成される。App.g.cs には partial である App クラスの追加の partial 定義が含まれる。InitializeComponent もそこで定義されていて、App.xaml.cs 内のコンストラクタから呼ばれる。
プログラムが開始されると、App クラスは PhoneApplicationFrame 型のオブジェクトを作成し、それをRootVisual プロパティーに設定する。このフレームは 480x800 ピクセルで、画面全体を覆う。PhoneApplicationFrame オブジェクトは Web ブラウザのように動作し、MainPage と呼ばれるオブジェクトへと誘導する。
MainPage は Silverlight プログラムにおいて二番目の主要クラスで、MainPage.xaml と MainPage.xaml.cs で定義される。MainPage.xaml.cs は次のようになる。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
namespace SilverlightHelloPhone
{
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
}
}
}
System.Windows で始まる using は、Silverlight クラス群のためのもので、Microsoft.Phone.Controls 名前空間は phone 用の Silverlight 拡張のためのもので、PhoneApplicationPage クラスもそこに含まれる。
PhoneApplicationPage を拡張するクラス MainPage が、プログラムを起動したときの見た目を定義するものとなる。
MainPage.xaml は次のようになる。
<phone:PhoneApplicationPage
x:Class="SilverlightHelloPhone.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Forground="{StaticResource PhoneForegroundBrush}"
SupportedOrientation="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION"
Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0"
Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
</Grid>
</Grid>
</phone:PhoneApplicationPage>
x:Class で指定されている SilverlightHelloPhone.MainPage が PhoneApplicationPage クラスを拡張するクラスだということがわかる。
d ("designer") と mc ("markup compatibility") の二つの名前空間は、Expression Blend や Visual Studio といった、XAML デザインプログラムのためのもの。
コンパイルにより、MainPage.g.cs が生成され、そこに MainPage クラスの追加部分定義が含まれる。そこには InitializeComponent メソッドも含まれ、それは MainPage.xaml.cs 内のコンストラクタから呼ばれる。
Silverlight の多くのクラスが次のクラス階層内にある。
Object
DependencyObject (abstract)
UIElement (abstract)
FrameworkElement (abstract)
UIElement はビジュアルオブジェクトで、ユーザ入力を受け付ける。Silverlight では、全てのビジュアルオブジェクトがユーザ入力を受け取ることができる。
FrameworkElement は UIElement から派生する唯一のクラスであるが、これは Windows Presentation Foundation 由来のもので、開発者が独自のフレームワークを作成するためのものであるが、Silverlight ではそういうことはできないので、UIElement と FrameworkElement の違いに意味はない。
FrameworkElement を拡張するクラスとして、Control、Panel、TextBlock、などがある。
MainPage.xaml 内のネストされた要素群はビジュアルツリーを定義する。Windows Phone 7 用の Silverlight プログラムでは、ビジュアルツリーは常に PhoneApplicationFrame 型のオブジェクトから開始し、これは、端末の全画面を覆う。 Windows Phone 7 用の Silverlight プログラムは、常に PhoneApplicationFrame のインスタンスを一つだけ持つ。これは非公式に「フレーム」と呼ばれる。
一方、PhoneApplicationPage のインスタンスは複数存在する。これは非公式には「ページ」と呼ばれる。フレームは一度に一つのページしか保持しない。デフォルトでは、システムトレイ(ステータスバー)用の領域をあけるため、ページはフレームの全サーフィスを覆うことはしない。
TextBlock をセンタリングするため、HorizontalAlignment、VerticalAlignment というプロパティーを使用できる。
<TextBlock Text="Hello, Windows Phone 7!"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>