第 1 章: "Longhorn" アプリケーション モデル
第 1 章: "Longhorn" アプリケーション モデル
Brent Rector
ワイズフクロウコンサルティング
2003 年 10 月
内容
"Longhorn" アプリケーション モデルの機能
Application クラス
NavigationApplication クラス
拡張可能なアプリケーション マークアップ言語 (XAML)
概要
新しいアプリケーション モデルが必要な理由 主な理由の 1 つは、Microsoft® Windows® 用アプリケーションの開発と Web 用アプリケーションの開発のギャップを埋める場合です。
現在、Windows アプリケーションを作成するときに、Windows の機能を利用できます。 アプリケーションは、応答性の高い豊富なユーザー インターフェイスを提供できます。 クライアント コンピューターにアプリケーションをインストールできます。これにより、ネットワーク接続なしでアプリケーションをオフラインで実行できます。 Windows アプリケーションでは、クライアント コンピューターのハードウェア機能を利用できます。
ただし、従来の Windows アプリケーションには、いくつかの欠点もあります。 通常、Windows アプリケーションをインストールする必要があります。 これにより、アプリケーションと更新プログラムの展開が困難になります。 Windows アプリケーションはブラウザーで実行されません。 そのため、ページ指向アプリケーション、あるページから別のページへの直接ナビゲーション、ページ履歴などの使い慣れた Web UI パラダイムは、最初から作成しない限り、アプリケーションでは使用できません。 Windows アプリケーションでは、特に同じページ上でテキストとグラフィックスを混在させる場合に、テキストをあまりサポートしていません。 テキストをグラフィックスの周囲に自動的に流し、ユーザーが開始するウィンドウ サイズの変更とフォントと読みやすさのユーザー設定に応答する Windows アプリケーションを作成することは、膨大な作業です。
Web アプリケーションには、独自の長所もあります。 Web ページを参照すると、ブラウザーはそのページとページに必要なコンポーネントのみをダウンロードします。 新しいページに移動すると、ブラウザーによって新しいページの要件がダウンロードされます。 言い換えると、ブラウザーは必要に応じてアプリケーションを段階的にダウンロードします。
Web アプリケーションのデプロイは簡単です。 どのようなデプロイですか? 必要なアプリケーション コンポーネントをサーバーに配置し、必要に応じてブラウザーでダウンロードします。 それ自体はデプロイされません。
Web アプリケーションの UI の作成も非常に簡単です。 マークアップを使用して意図を宣言します。 たとえば、特定の位置にテーブルが必要だとします。 表の後に画像が表示されます。 画像の周りにテキストを流したい。 Web アプリケーションでのテキスト、グラフィックス、メディア (サウンドとビデオ) の混在は簡単です。
もちろん、Web アプリケーションにも悪い点があります。 デスクトップ システムに Web アプリケーションをインストールすることはできません。そのため、アプリケーションはオフラインで実行できません。 常にサーバーへの接続が必要です。 特定のアプリケーション操作では、サーバーへのラウンドトリップが必要であり、パフォーマンスが低下します。 Web アプリケーションによるコントロールの選択は、使用可能な Windows コントロールと比較して非常にプリミティブです。 そのため、通常、Web アプリケーションの対話機能は低くなります。 また、テーブルを使用して単純でないレイアウトを表現する必要があるため、Web アプリケーション用の魅力的な UI を開発することも困難です。
現在、新しいアプリケーションを設計する開発者は、最初の、巨大で元に戻せない決定を行う必要があります。アプリケーションは Web スタイルのアプリケーションか、従来の Microsoft Win32® アプリケーションか。 選択したアプリケーション モデルに応じて、完全に分離されたプログラミング モデル (およびスキル! ) が必要です。
"Longhorn" を使用すると、両方の長所を使用してアプリケーションを開発できます。 "Longhorn" アプリケーション モデルは、Web アプリケーションの最適な機能と Windows アプリケーションの最適な機能を利用し、マネージド コードに基づく単一の統合プログラミング モデルでそれらを組み合わせます。
新しいアプリケーション モデルを開発する 2 つ目の主な理由は、現在使用されているさまざまな "アプリケーション" を作成できる単一のプログラミング モデルを提供することです。 CNN や MSNBC など、お気に入りの Web サイトのいずれかを確認します。 Web サイトは従来のアプリケーションですか? ドキュメントですか? マルチメディア プレゼンテーションですか? 多くの場合、3 つの質問すべてに対する答えは yes です。
Web サイトにリスト ボックス、編集コントロール、ラジオ ボタンなどの UI 要素が含まれている場合、UI を表示するアプリケーションのように見えます。 ただし、画像や画像の周囲を流れるテキストを表示する場合、Web サイトはドキュメントに似ています。 Flash コンテンツ、グラフィックス、オーディオ、ビデオ、アニメーションを表示すると、Web サイトはマルチメディア プレゼンテーションのようです。
もちろん、このような豊富なWebサイトの開発は困難です。 ページの HTML マークアップベースの説明に修正プログラムを適用し、リッチ UI 用の Microsoft ActiveX® コントロール、埋め込み Flash アニメーション、場合によってはドキュメントサポート用のポータブル ドキュメント形式 (PDF) を使用する必要があります。 これらのテクノロジはすべて、異なるアーキテクチャを使用し、異なるパフォーマンス特性を提供し、さまざまなプログラミング モデルとツールを必要とします。
これは通常、アプリケーションの各部分を開発するために、異なるスキル セットを持つ複数の開発者を雇用する必要があることを意味します。 その後、開発者は、異なるモデルを 1 つの動作するアプリケーションにマージする必要があります。 アプリケーションの開発は十分に困難です。 デバッグは、多くの場合、悪夢です。
"Longhorn" は、ドキュメント、アプリケーション、メディアという 3 つの階層をサポートする統合アーキテクチャを提供します。 マークアップを使用して UI を宣言的に作成しますか? それのために行く。 豊富な Windows コントロールを使用する必要がありますか? その後、そうします。 厳密に型指定されたマネージド言語でイベント ハンドラーを記述しますか? これは、同様に行うことができます。 ユーザーの好みに応じてインテリジェントなレイアウトとプレゼンテーションを行い、クライアント システムで最適な表示と読み取りを行うために最適化された、ドキュメント内のテキスト、グラフィックス、ビデオを混在させたいですか? なんでしょうね。 これも得られます。
"Longhorn" アプリケーション モデルを使用すると、アプリケーション スタイルの UI 機能、テキストとグラフィックスのドキュメント スタイルのプレゼンテーション、およびさまざまなメディアの統合をサポートする単一のプログラミング モデルを使用してアプリケーションを記述できます。 さらに、Web アプリケーションなどのマークアップを使用して UI を作成することもできます。 また、Web アプリケーションのデプロイ (またはデプロイ不足) も容易になります。 ただし、Windows アプリケーションのようにオフラインで使用するためにアプリケーションをインストールするパフォーマンスと機能は引き続きあります。 アプリケーションは、1 つのソース コード ベースを再コンパイルするだけで、スタンドアロン アプリケーションとして実行することも、Web ブラウザーでホストすることもできます。 どちらの場合も、アプリケーションは、多くの従来の Windows アプリケーションと同様にフォーム ベースにすることも、Web アプリケーションなどのページ ベースにすることもできます。
"Longhorn" アプリケーション モデルの機能
"Longhorn" アプリケーション モデルは、アプリケーションが何であるかを定義します。
- そのエントリ ポイント
- 制御の流れ - あるページから別のページに移動する方法
- その共有状態とリソース
- アプリケーション全体のイベント
- 他のアプリケーションからの分離
"Longhorn" アプリケーション モデルでは、アプリケーションをデプロイして保守する方法を定義します。
- 1 つまたは複数のファイルとしてデプロイする
- 更新、ロールバック、管理
"Longhorn" アプリケーション モデルは、アプリケーションに対するユーザーのエクスペリエンスを定義します。
- 影響なしインストール
- スタンドアロン (Windows スタイル) またはブラウザーに統合
- オンラインまたはオフラインで実行
- ナビゲーション モデル
"Longhorn" Web アプリケーション
"Longhorn" アプリケーション モデルを使用すると、今日の Web アプリケーションの記述方法と同様に、豊富なアプリケーションを記述できます。 これにより、Web 開発者は、記述するコードが動的 HTML (DHTML) Web ページのコードに似ているため、簡単な移行パスが提供されます。 マークアップとスクリプトを同じファイルに配置 (シャダー) できます。 アプリケーションのファイルを Web サーバーにデプロイできます。 アプリケーション ページは Web ブラウザーで実行されます。
ただし、"Longhorn" Web スタイルアプリケーションのオブジェクト モデルは、DHTML よりもはるかにシンプルで強力です。 アプリケーション コードでは、完全な "Longhorn" プレゼンテーション レイヤーを使用できます。 そのため、"Longhorn" Web アプリケーションは、リッチ クライアント コントロールを使用し、ページ上でマルチメディアとグラフィックスをサポートし、イベントをローカルで処理できます。基本的には、通常のクライアント アプリケーションが行う可能性のあるすべてです。 実際、"Longhorn" Web アプリケーションは、ファイルがサーバー上に存在すること以外の "Longhorn" デスクトップ アプリケーションと大きく異なります。通常、ブラウザーは UI をホストしますが、必ずしもホストするわけではありません。ユーザーがクライアント システムにアプリケーションをインストールしていないため、アクセス許可が制限された状態でアプリケーションが実行されます。
"Longhorn" デスクトップ アプリケーション
"Longhorn" アプリケーション モデルでは、デスクトップ アプリケーションの作成方法も定義されています。 デスクトップ アプリケーション
デスクトップ アプリケーションは、ブラウザー ウィンドウまたはスタンドアロン ウィンドウでも実行できます。 実際、デスクトップ アプリケーションは、従来は Web アプリケーションに関連付けられている次のような多くの機能をサポートできます。
- 外部エントリ ポイントを明示的に定義します。つまり、任意のページから開始できます
- ページ間で状態を共有する
- ページ ナビゲーション イベントなど、さまざまなイベントを処理する
- アプリケーション フローの制御
- ページ履歴/移動ナビゲーション ログからエントリを追加/削除する
- アプリケーション ウィンドウの起動
"Longhorn" アプリケーションのビルド
"Longhorn" アプリケーションを構築するには、アプリケーションのオブジェクト モデルを定義します。 プログラムでモデルを定義するには、コードを記述するか、拡張アプリケーション マークアップ言語 (XAML) と呼ばれる言語でマークアップを記述します。 コードやマークアップを 1 つ以上の .NET アセンブリ、アプリケーション マニフェスト ファイル、および配置マニフェスト ファイルにコンパイルします。
必要に応じて、コンテナーと呼ばれる新しいファイル形式にアプリケーションをパッケージ化できます。 コンテナー内のアプリケーション ファイルは、圧縮、暗号化、デジタル署名が可能です。
第 2 章では "Longhorn" アプリケーションの構築について詳しく説明しますが、現時点では、"Longhorn" アプリケーションをビルドすると、アプリケーションのコード、アプリケーションが使用するすべてのコンポーネントを記述するアプリケーション マニフェスト、およびアプリケーションのインストールと保守の方法をシステムに指示する配置マニフェストが提供されます。
"Longhorn" アプリケーションのデプロイ
"Longhorn" アプリケーション モデルは、アプリケーションの簡単でコスト効率の高いデプロイを実現します。 最も簡単なケースでは、アプリケーション ファイルをサーバーにコピーするだけです。 同様に、アプリケーションのインストールは簡単で影響を受けず、
1 つのオプションは、アプリケーションをまったくインストールしない方法です。 ユーザーは、サーバー上のアプリケーション マニフェストを参照して実行できます。 "Longhorn" は、アプリケーションを段階的にダウンロードして実行します。 確認の要求、再起動の要件、DLL の問題は発生しません。 実際には、アプリケーションをインストールまたは実行するための管理者権限さえ必要ありません。
または、ユーザーはサーバー上のアプリケーションの配置マニフェストを参照して実行できます。 "Longhorn" は、アプリケーションを段階的にダウンロードし、インストールして実行します。 既定では、すべての "Longhorn" アプリケーションは、セキュリティで保護された実行環境 (SEE) と呼ばれる制限されたアクセス許可環境で実行されます。
SEE で実行されているアプリケーションは、インターネット ゾーンに関連付けられている今日のアプリケーションに付与されたアクセス許可とほぼ同等の制限付きアクセス許可セットを受け取ります。 "Longhorn" が既定で提供するよりも追加のアクセス許可を必要とするアプリケーションは、そのアプリケーション マニフェストで追加のアクセス許可を要求する必要があります。
ユーザーがこのようなアプリケーションを初めて実行すると、"Longhorn" トラスト マネージャーは昇格されたアクセス許可要求を評価し、アプリケーションのアクセス許可要求の付与に関連する推奨されるリスク レベルをユーザーに通知し、そのリスク レベルに対して推奨される応答を提供します。 ユーザーが要求されたアクセス許可をアプリケーションに付与することを Trust Manager に許可すると、Trust Manager はこの情報を記録します。 インストールされているアプリケーションの後続の実行は、セキュリティ警告なしで続行されます。
現在、アプリケーションをローカルにインストールすると、LocalComputer ゾーンから読み込まれるという理由だけで FullTrust アクセス許可セットが受け取ります。 コード アクセス セキュリティ (CAS) は、"Longhorn" アプリケーションでは動作が異なります。 ローカル (またはインストール済み) のアプリケーションは、ユーザーが FullTrust を自動的に受け取る代わりに、ユーザーがダウンロードしたサイトのセキュリティ ポリシーの下で実行されます。これは、ローカルにインストールされているためです。
アプリケーション、そのコンポーネント、およびそのリソースを読み込むとき、"Longhorn" は、次のような共通言語ランタイム (CLR) セキュリティ システムに証拠を提供します。
- インターネット ゾーンと配信元サイト (Uniform Resource Identifier [URI] から)
- 発行元とモジュールの名前 (配置マニフェストから)
CAS では、アプリケーションの証拠に基づいて、アクセス特権に対するセキュリティ ポリシーベースの適用が提供されます。
アプリケーションの配置マニフェストでは、アプリケーションの新しいバージョンを確認するときに "Longhorn" で使用する更新間隔を指定できます。 "Longhorn" は、新しいバージョンが使用可能であることを検出すると、新しいバージョンをダウンロードしてバックグラウンドでインストールします。 ユーザーが次にアプリケーションを実行すると、新しいバージョンを受け取ります。
アプリケーションをインストールすると、"Longhorn" は以前のバージョン (存在する場合) を保持します。 必要に応じて、以前のバージョンに不必要にロールバックしたり、プログラムの追加と削除を使用してアプリケーションを完全にアンインストールしたりすることもできます。 IT 部門は、ハンズフリー展開のためにアプリケーションのインストールをクライアント システムにプッシュできます。
プロジェクトのコンパイル時にアプリケーションを配置する方法を指定し、通常はソース コードをほとんどまたはまったく変更しなくても、再コンパイルして配置シナリオを変更できます。
開発者のプログラムは、最初は、MSAvalon.Windows.Application クラスのインスタンスを介して多くの "Longhorn" アプリケーション サポートとやり取りするため、そのクラスを見てみましょう。
アプリケーション クラス
"Longhorn" プログラムには、常にアプリケーション オブジェクトの 1 つのインスタンスが含まれます。 このオブジェクトは、MSAvalon.Windows.Application クラスから直接または間接的に派生し、次の関数を実行します。
- アプリケーションのエントリ ポイント、カプセル化、およびスコープを提供します
- アプリケーションで、アプリケーションを構成するページ間でコードと状態を共有できるようにします
- アプリケーション レベルのイベントを提供します
- アプリケーションのウィンドウのコレクションを保持します。
- セキュリティ モデルを提供します
- アプリケーションが使用するすべてのリソースを定義します
MSAvalon.Windows.Application クラスは、アプリケーションに基本的なアプリケーション サポートを提供します。 通常、アプリケーションでオーバーヘッドが少なく、ページ ナビゲーション機能を使用しない場合に使用します。 ただし、ほとんどの "Longhorn" プラットフォーム アプリケーションは、MSAvalon.Windows.NavigationApplication クラス
次に示すSimpleApplication1.csソース ファイルの一覧では、Application オブジェクトの使用方法を示します。
SimpleApplication1.cs
using System;
using MSAvalon.Windows;
using MSAvalon.Windows.Controls;
using MSAvalon.Windows.Media;
namespace IntroLonghorn {
public class MyApp : MSAvalon.Windows.Application {
MSAvalon.Windows.Controls.SimpleText txtElement;
MSAvalon.Windows.Window mainWindow;
protected override void OnStartingUp (StartingUpCancelEventArgs e) {
base.OnStartingUp (e);
CreateAndShowMainWindow ();
}
private void CreateAndShowMainWindow () {
// Create the application's main window
mainWindow = new MSAvalon.Windows.Window ();
// Add a dark red, 14 point, "Hello World!" text element
txtElement = new MSAvalon.Windows.Controls.SimpleText ();
txtElement.Text = "Hello World!";
txtElement.Foreground = new
MSAvalon.Windows.Media.SolidColorBrush (Colors.DarkRed);
txtElement.FontSize = new FontSize (14,
FontSizeType.Point);
mainWindow.Children.Add (txtElement);
mainWindow.Show ();
}
}
internal sealed class EntryClass {
[System.STAThread]
private static void Main () {
MyApp app = new MyApp ();
app.Run ();
}
}
}
次のコマンド ラインを使用して、SimpleApplication1.csソース コードを実行可能アプリケーションにコンパイルしました。 参照されるアセンブリへのパスを調整する必要がある場合があります。
csc /r:C:\WINDOWS\Microsoft.NET\Windows\v6.0.4030\PresentationCore.dll
/r:C:\WINDOWS\Microsoft.NET\Windows\v6.0.4030\PresentationFramework.dll
/r:C:\WINDOWS\Microsoft.NET\Windows\v6.0.4030\WindowsBase.dll
SimpleApplication1.cs
Application クラスには、他にも多くの便利なプロパティ、メソッド、およびイベントが含まれています。 たとえば、アプリケーション クラスは、OnShuttingDown 仮想メソッドをオーバーライドして、カスタム シャットダウン動作を提供できます。 また、アプリケーション クラスは、StartingUp と ShuttingDown イベントを提供し、他のクラスがスタートアップ通知とシャットダウン通知に登録できるようにします。 Shutdown メソッドを使用すると、プログラムによってアプリケーションのシャットダウンを開始できます。
ソース コード内の複数の場所からアプリケーション オブジェクトを参照したい場合があります。 したがって、Application クラスは、アプリケーション オブジェクトへの参照を返す Current 静的プロパティを提供します。 次のコード フラグメントでは、Current プロパティを使用してアプリケーション オブジェクトを検索し、シャットダウン イベント通知に登録します。
MyApp app = (MyApp) MSAvalon.Windows.Application.Current;
app.ShuttingDown += new
Application.ShuttingDownEventHandler (ShutDownHandler);
§
private static void
ShutDownHandler (object sender, MSAvalon.Windows.ShuttingDownEventArgs e) {
§
}
NavigationApplication クラス
アプリケーションのナビゲーション サポートが必要な場合は、通常、MSAvalon.Windows.Navigation.NavigationApplication クラス
- ナビゲーション ベースのアプリケーションの記述を簡略化します。通常、クラスをサブクラス化する必要はありません
- 接続が使用可能なタイミングを決定します
- ナビゲーション イベント (Navigateing、NavigationProcess、Navigated、NavigationError、LoadCompleted、Stoppedなど) を提供します。これは、アプリケーションのいずれかのウィンドウで適切なイベントが発生したときに発生します。
- ページ間で状態を共有する
- ページ間で共有されるプロパティ値のコンテナーを提供します
- 既定で初期ウィンドウを開くポリシーを実装します
外部では、ナビゲーション アプリケーションのユーザーは、アプリケーションの明確に定義されたエントリ ポイントにのみ移動できます。 ただし、内部的には、開発者はイベントをフックすることによってナビゲーションを制御します。 ウィンドウまたはフレームが新しいページへの移動を試みるタイミングと、ナビゲーションが完了したタイミングを確認できます。 任意のナビゲーションをキャンセルまたはリダイレクトできます。 ターゲット ページの ID を確認できます。 ナビゲーション エラーを処理できます。
使い慣れたナビゲーション モデルを使用すると、アプリケーションを簡単に使用できます。 ナビゲーション アプリケーションは、Web と同様の動作を提供します。 アプリケーションでは、ハイパーリンクの使用、転送ボタンと戻るボタンの提供、お気に入りの一覧の表示、ページ履歴の管理を行うことができます。 "Longhorn" NavigationApplication クラスと関連クラスは、このような機能のすべてのサポートを提供します。
ナビゲーション アプリケーションはオンラインでもオフラインでも機能し、ブラウザーがアプリケーションをホストしているか、アプリケーションがスタンドアロンとして実行されているかにかかわらず、同じように動作します。 さらに、この Web ライク動作を完全に制御できます。 必要に応じてユーザー エクスペリエンスをカスタマイズできます。 Travelog エントリを挿入、削除、および変更して、転送操作と戻る操作の実行場所を制御できます。 履歴に記録するページ (エントリ ポイント) を定義できます。
通常、ナビゲーション アプリケーションは、MSAvalon.Windows.Navigation.NavigationWindow クラスの 1 つ以上のインスタンスを作成します。 次に示すSimpleApplication2.csの一覧では、これらのクラスの使用方法を示します。 この一覧は、NavigationApplication と NavigationWindow クラスを使用する点を除き、SimpleApplication1.csと同じです。
SimpleApplication2.cs
using System;
using MSAvalon.Windows;
using MSAvalon.Windows.Controls;
using MSAvalon.Windows.Media;
using MSAvalon.Windows.Navigation;
namespace IntroLonghorn {
public class MyApp : MSAvalon.Windows.Navigation.NavigationApplication {
protected override void OnStartingUp (StartingUpCancelEventArgs e) {
base.OnStartingUp (e);
CreateAndShowMainWindow ();
}
private void CreateAndShowMainWindow () {
// Create the application's main window
mainWindow = new MSAvalon.Windows.Navigation.NavigationWindow ();
// Fill window with appropriate controls
§
// Show the window
mainWindow.Show ();
}
}
internal sealed class EntryClass {
[System.STAThread]
private static void Main () {
MyApp app = new MyApp ();
app.Run ();
}
}
}
これまで見てきたコードは、従来のプログラミング モデルのもう 1 つのバリエーションにすぎません。 唯一の新しい側面は、私が使用した実際のクラスです。 ただし、ほとんどの場合、このコードの多くは実際には記述されません。 少し回り道を取り、この同じコードをよりコンパクトに、少なくとも理解しやすい方法で記述できる新しいプログラミング言語について学びましょう。
拡張可能なアプリケーション マークアップ言語 (XAML)
多くのアプリケーションでは、記述するコードの多くは、アプリケーションの UI の作成と更新に関連しています。 実際、前の例では、UI の作成に必要なコード以外のコードはありませんでした。 ここ数年で、多くの開発者は、使用可能なマークアップ言語の 1 つを使用して、アプリケーションの UI を記述し、定義することを好むことさえ学習しました。 "Longhorn" プラットフォームは、Extensible Application Markup Language (XAML; 発音 "Zaml" という名前の新しいマークアップ言語を定義します。これは、"camel" と音を立てます)。
マークアップ言語を使用して UI を定義すると、手続き型プログラミング言語を使用するよりも多くの利点があります。 これらの利点には、次のようなものがあります。
- より明らかな制御階層
- より明らかなプロパティの継承
- ツールによるマークアップ言語の処理と解釈の容易化
- UI と手続き型コードの分離の可能性
私は XAML が好きなので、この章でこれまでに説明した手続き型のコーディングを使用するのではなく、それを使用して UI を定義する方が好きです。 ただし、XAML 以外の何も使用しなくても、必要な操作をすべて実行できるとは考えないでください。
ドキュメントの「ドキュメントは XAML で完全に記述でき、ブラウザーに表示されることがよくあります」というドキュメントの記述を検討してください。私は急いで、この文は、
XAML ファイルについては、第 3 章で詳しく説明します。ここでは、XAML の入門を見てみましょう。
- XAML 要素名 は.NET Framework クラス名です。 XAML 要素を定義すると、XAML 要素と同じ名前の .NET Framework クラスのインスタンスが効果的に作成されます。
- XAML 属性名、通常はクラス インスタンス内の同じ名前のプロパティまたはフィールドにマップされます。
SimpleApplication1.csプログラムでは、次のコードを使用してウィンドウを作成し、それにコントロールを追加します。
// Create the application's main window
mainWindow = new MSAvalon.Windows.Window ();
// Add a dark red, 14 point, "Hello World!" text element
txtElement = new MSAvalon.Windows.Controls.SimpleText ();
txtElement.Text = "Hello World!";
txtElement.Foreground = new
MSAvalon.Windows.Media.SolidColorBrush (Colors.DarkRed);
txtElement.FontSize = new FontSize (14, FontSizeType.Point);
mainWindow.Children.Add (txtElement);
mainWindow.Show ();
次の XAML ドキュメントでは、まったく同じ UI が生成されます。
HelloWorld.xaml
<Window xmlns="https://schemas.microsoft.com/2003/xaml" Visible="true">
<SimpleText Foreground="DarkRed" FontSize="14">Hello World!</SimpleText>
</Window>
ルート
XML パーサーは、最新のスコープ内の既定の名前空間属性で指定された名前空間に対する非修飾要素名を解釈 xmlns。 xmlns "https://schemas.microsoft.com/2003/xaml" の値を指定する場合、ビルド システムは、定義要素の非修飾要素名、またはその下位要素の 1 つを、定義済みの名前空間のセット内のクラスの名前として解釈します。
C# を例として使用して、より具体的に説明します。
using MSAvalon.Windows;
using MSAvalon.Windows.Controls;
using MSAvalon.Windows.Controls.Primitives;
using MSAvalon.Windows.Data;
using MSAvalon.Windows.Documents;
using MSAvalon.Windows.Shapes;
using MSAvalon.Windows.Media;
using MSAvalon.Windows.Media.Animation;
using MSAvalon.Windows.Navigation;
また、標準の既定の名前空間宣言により、ビルド システムは、
Window 要素定義内に SimpleText 要素を入れ子にしました。 これにより、システムは MSAvalon.Windows.Controls.SimpleText オブジェクト
上記の XAML コードを HelloWorld.xaml という名前のファイルに保存し、ファイルを実行します。 図 1-1 に示すように、ブラウザーはファイル内の XAML コードを解釈し、UI を表示します。
図 1-1 Hello World の XAML バージョンを表示しているブラウザー (画像をクリックすると大きな画像が表示されます)
前述の既定の名前空間のいずれかで定義されていない .NET クラスを使用することもできます。 一般的な例として、作成するアセンブリのクラスを使用します。 ビルド システムは、XAML ソース ファイルで指定した要素名を、適切なアセンブリ内の適切な .NET クラスにマップできる必要があります。 XAML は、という名前の XML 処理命令 (PI) を定義します。マッピング、この関連付けを行うために使用します。
?PI マッピングを使用すると、CLR 名前空間とアセンブリにマップする XML 名前空間プレフィックスを定義できます。 この名前空間プレフィックスで XAML 要素名を修飾する場合は、実質的に、要素名を取得し、CLR プレフィックスを名前に追加し、結果の名前を持つクラスのインスタンスを作成するようにビルド システムに指示します。 コンパイラは、クラスの定義を検索できるように、指定されたアセンブリを参照します。
次の例では、WiseOwl.Statistics.PoissonDeviate クラスのインスタンスを作成します。このクラスの定義は、WiseOwl.Statistics.Library アセンブリに存在します。
<?Mapping XmlNamespace="stat" ClrNamespace="WiseOwl.Statistics"
Assembly="WiseOwl.Statistics.Library" ?>
<Window xmlns="https://schemas.microsoft.com/2003/xaml" Visible="true">
<SimpleText Foreground="DarkRed" FontSize="14">Hello World!</SimpleText>
<stat:PoissonDeviate Mean="5.0" />
</Window>
XAML が単に .NET Framework UI クラスを使用するコードを生成する別の方法であることを十分に強調することはできません。 実際には、ビジュアル デザイナーを使用して XAML UI 仕様をグラフィカルに表示するツールを使用できます。 別のツールで逆の操作を行い、UI をグラフィカルにデザインし、XAML ファイルとして保存することができます。 さらに、別のツールで UI デザインを手続き型コードとして保存することもできます。これは、WinForms デザイナーの動作に似ています。 これらすべての方法は、同じ情報を指定するさまざまな方法に過ぎません。
この章の前半で、ブラウザーがウィンドウに XAML ファイルをレンダリングできることを説明しました。 ブラウザーでこれを行うことができるのは、XAML ファイルにマークアップのみが含まれている場合のみです。単純な例が示されています。 UI が複雑になるにつれて、通常は、UI を記述する XAML に加えて、イベント ハンドラーやその他の非マークアップ ソース コードを使用する必要があります。 ソース コード ベース (マークアップとマークアップ以外のソース コード) が混在している場合は常に、MSBuild ユーティリティを使用してマークアップとソース コードをコンパイルする必要があります。 コンパイル後、アプリケーションをスタンドアロン コンポーネントとして実行するか、ブラウザーに結果の UI を表示させることができます。
概要
大丈夫です! 新しいアプリケーション モデルの基本を理解しました。 マークアップを使用して UI を宣言的に作成する方法を学習しました。ただし、非常に単純な UI です。 XAML ファイルを使用して同等の Web ページを記述し、ユーザーが参照できるようにそれらのファイルをサーバーにデプロイできます。 ただし、より興味深いシナリオでは、通常、アプリケーションをデプロイする前にコンパイルする必要があります。 それでは、"Longhorn" アプリケーションをビルドしてデプロイする方法について説明します。
第 2 章: "Longhorn" アプリケーションの構築に進みます。
© 2003 Microsoft Corporation. すべての権限が予約されています。
IntelliSense、Microsoft、MSDN、MS-DOS、Visual Basic .NET、Visual Studio .NET は、米国およびその他の国における Microsoft Corporation の登録商標または商標です。 ここに記載されているその他の製品名および会社名は、それぞれの所有者の商標である可能性があります。