Silverlight-applications-resources-deployment
アプリケーション、リソース、展開
この章では、アプリケーションとそれらが必要とするリソースの作成とデプロイに関する一般的な問題を見ていきます。
プラグインをロードする
Silverlightアプリケーションを実行するための最小要件は、Silverlightプラグインをロードするオブジェクトタグを含むWebページと、コンパイルされたSilverlightコンテンツ自体をホストすることです。
ご覧のとおり、 object タグで param タグを使用してコンテンツを指し示しました。
- * HTML <Object>タグ*
コンテンツのダウンロード中に表示されるユーザーインターフェイス、エラー発生時に実行されるJavaScriptコード、Silverlightがインストールされていない場合に表示されるフォールバックコンテンツなどの機能を制御するために渡すことができる他のパラメーターがあります。
HTMLの<Object>
これは、Silverlightコンテンツを読み込むオブジェクトタグの例です。 これは前に見たことがありますが、オブジェクトタグ自体の属性から始めて、いくつかのことをもう少し詳しく見ていきます。
タイプ属性
type属性には、これをSilverlight要素として識別するMIMEタイプが含まれています。 これは、ブラウザが使用している埋め込みコンテンツの種類を認識する方法です。 オブジェクトタグは驚くほど柔軟です。 プラグイン専用ではありません。 これを使用して、埋め込み画像、またはHTML、およびSilverlightやFlashなどのプラグインベースのコンテンツをホストできます。
Silverlightプラグインがインストールされている場合、これがロードされます。 そうでない場合、標準形式の動作では、ブラウザはobjectタグ内のHTMLコンテンツを、objectタグとparamタグが存在しないかのようにレンダリングします。
<object data = "data:application/x-silverlight-2," type = "application/x-silverlight-2"
width = "100%" height = "100%">
<param name = "source" value = "ClientBin/DataBinding.xap"/>
<param name = "onError" value = "onSilverlightError"/>
<param name = "background" value = "white"/>
<param name = "minRuntimeVersion" value = "5.0.61118.0"/>
<param name = "autoUpgrade" value = "true"/>
<a href = "http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0"
style = "textdecoration:none">
<img src = "http://go.microsoft.com/fwlink/?LinkId=161376"
alt = "Get Microsoft Silverlight" style = "border-style:none"/>
</a>
</object>
データ属性
次の属性であるデータは、少しわかりにくいです。 末尾のコンマはそこにあることを意味します。 いくつかの重要な機能は-
- この属性は技術的には必要ありませんが、一部のWebブラウザーはプラグインのロード時に驚くべき動作をするため、追加することをお勧めします。
- *オブジェクトタグ*は埋め込みコンテンツをホストするように設計されているため、ブラウザはバイナリ文字列、ビットマップファイル、ビデオ、またはオーディオストリーム、または何かを含むことを期待しています。
- 通常、データ属性にURLを挿入し、ブラウザがそのデータをダウンロードしてプラグインに渡すことを期待します。
- データ属性はURIを取り、通常はJPEGファイルなどのいくつかのデータを指しますが、ここでは、少し変わったURIスキームを使用しています。
<param>タグ
オブジェクト内には、ソース param から始まるさまざまな param タグがあります。
<param name = "source" value = "ClientBin/DataBinding.xap"/>
Silverlightコンテンツのダウンロード元のプラグインを提供します。
JavaScriptエラーハンドラを提供する必要があります。 これは、ダウンロードプロセスが失敗した場合に呼び出されます。 また、Silverlightコードが実行されると、未処理の例外がスローされた場合にも呼び出されます。
<param name = "onError" value = "onSilverlightError"/>
したがって、それは単にロード障害のためではありません。 コードに必要なSilverlightの最小バージョンも指定する必要があります。
Microsoftはユーザーに最新の状態を維持することを推奨しているため、マシンにSilverlightプラグインがインストールされると、Windows Updateを介して新しいバージョンが提供されますが、ユーザーが必要なバージョンよりも古いバージョンを実行する可能性は常にあります。
<param name = "minRuntimeVersion" value = "5.0.61118.0"/>
<param name = "autoUpgrade" value = "true"/>
この minRuntimeVersion パラメーターを使用すると、必要なバージョンを指定できます。 インストールされているバージョンが古い場合、onErrorハンドラーが呼び出されます。
Silverlightは、エラー処理JavaScript関数に数値のエラーコードを渡します。プラグインが古いことを示すために、「 8001 」という明確なエラーコードがあります。
JavaScriptコードを記述して問題に対応することも、プラグインにアップグレードを依頼することもできます。
ここでは、 autoUpgrade パラメーターが ' True 'に設定されています。つまり、インストールされているプラグインが古い場合、Silverlightは、より新しいバージョンが必要であることをユーザーに伝えるメッセージを自動的に表示します。それら。
フォールバックHTMLコンテンツ
paramタグの後には、Silverlightがインストールされていない場合に使用される*フォールバックHTMLコンテンツ*があります。
*MIME* タイプが不明なオブジェクトタグの標準的なブラウザの動作は、オブジェクトタグとparamタグがまったく存在しないかのように動作することです。 そのため、このタグとそのコンテンツは、Silverlightプラグインを持たないシステムで表示されます。
<a href = "http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0"
style = "text-decoration:none">
<img src = "http://go.microsoft.com/fwlink/?LinkId=161376"
alt = "Get Microsoft Silverlight" style = "border-style:none"/>
</a>
*go.microsoft.com* サイトへの2つのURL、ハイパーリンク、および画像に注目してください。
画像リンクは、SilverlightブランドとSilverlightをインストールするためのテキストを提供するビットマップに解決されます。 ハイパーリンクのエンドポイントは適度にスマートです。 サーバーは、ユーザーエージェントを検査して、リダイレクト先を決定します。
Silverlightインストール実行可能ファイルを返したり、ユーザーがサポートされていないプラットフォームを使用している場合は、Silverlightに関する情報を含むページにブラウザーを誘導します。
Silverlight.js
SilverlightコンテンツをロードするためのHTMLオブジェクトタグに代わるものがあります。 Microsoftは、 Silverlight.js というJavaScriptファイルを提供します。これにより、ブラウザースクリプトから読み込みプロセスを管理できます。
Visual Studioは、Webプロジェクトを作成して、新しく作成されたSilverlightプロジェクトをホストするときにコピーを追加します。 Silverlight SDKには、このファイルのコピーも含まれています。
*Silverlight.js* の主な利点は、Silverlightがインストールされていない場合により柔軟に対応できることです。
XAMLリソース
Silverlightは、XAMLで*オブジェクトリソース*を作成するためのメカニズムも提供します。 通常、XAMLで修正された特定の種類のオブジェクトがあり、アプリケーションの複数の場所で使用できるようにしたい場合があります。 テンプレートを複数の場所で使用することは非常に一般的です。
ボタンのカスタムルックを定義した場合、それを複数のボタンに適用することも、アプリケーションのすべてのボタンに適用することもできます。 XAMLリソースシステムは、これを行う方法を提供します。 *名前付きリソース*を定義し、それをXAMLの他の場所で使用できます。
テンプレートに加えて、ブラシやシェイプなどのグラフィカルリソースに対してこれを実行することも一般的です。 アプリケーションで特定の配色を使用している場合、その配色の色とブラシをリソースとして定義できます。
*SolidColorBrush* リソースの簡単なアプリケーションを次に示します。
<UserControl x:Class = "XAMLResources.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d"
d:DesignHeight = "300" d:DesignWidth = "400">
<UserControl.Resources>
<SolidColorBrush x:Key = "brushResource" Color = "AliceBlue"/>
</UserControl.Resources>
<Grid x:Name = "LayoutRoot" Background = "White">
<StackPanel>
<Rectangle Height = "50" Margin = "20" Fill = "{StaticResource brushResource}"/>
<Rectangle Height = "50" Margin = "20" Fill = "{StaticResource brushResource}"/>
</StackPanel>
</Grid>
</UserControl>
上記のXAMLコードでは、両方の長方形に StaticResource があることがわかります。 brushResource の色は AliceBlue です。
上記のコードをコンパイルして実行すると、次の出力が表示されます。
App.xaml
すべてのSilverlightアプリケーションには、 App.xaml というファイルがあります。 アプリケーション全体の情報が含まれています。 たとえば、ユーザーインターフェイス要素と同様にResourcesプロパティがあります。
*App.xaml* ファイルで定義したリソースは、プロジェクト内のすべてのXAMLファイルで使用できます。 したがって、これらの種類のリソースで *MainPage.xaml* を散らかすのではなく、アプリケーションのスコープに移動できます。
<Application
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
x:Class = "XAMLResources.App" >
<Application.Resources>
<SolidColorBrush x:Key = "brushResource" Color = "AliceBlue"/>
</Application.Resources>
</Application>
アプリケーションクラス
ほとんどのXAMLファイルと同様に、 App.xaml ファイルとそれに対応する*コードビハインド*ファイルはクラスを定義します。 このApplicationクラスは、Silverlightアプリケーションへのエントリポイントです。 App.xaml は通常、アプリケーションスコープのリソースを扱います。そのコードビハインドファイルには、スタートアップおよびシャットダウン処理コードが含まれています。
- Applicationクラスのインスタンスを作成した直後に、Silverlightは Application.Startup イベントを発生させます。
- ここで、ユーザーインターフェイスを作成します。 ユーザーインターフェイス要素を作成し、 Startup イベントでアプリケーションオブジェクトのRootVisualプロパティに割り当てると、Silverlightプラグインによって表示されるユーザーインターフェイスになります。
public partial class App : Application {
public App() {
this.Startup += this.Application_Startup;
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
InitializeComponent();
}
private void Application_Startup(object sender, StartupEventArgs e) {
this.RootVisual = new MainPage();
}
private void Application_Exit(object sender, EventArgs e) {}
private void Application_UnhandledException(object sender,
ApplicationUnhandledExceptionEventArgs e) {
if (!System.Diagnostics.Debugger.IsAttached) {
e.Handled = true;
Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); });
}
}
private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e) {
try {
string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;
errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");
System.Windows.Browser.HtmlPage.Window.Eval("throw new Error
(\"Unhandled Error in Silverlight Application " + errorMsg + "\");");
} catch (Exception) {}
}
}
注意点
*RootVisual* は変更できないことに注意してください。 一度だけ設定する必要があります。 アプリケーションの実行中にユーザーインターフェイスを変更する場合は、 *MainPage* を別のものに置き換えるのではなく、 *MainPage* のコンテンツを変更して変更する必要があります。
他のアプリケーションイベントは Exit で、これはユーザーインターフェイスが消えようとしているときに shutdown コードを実行する最後のチャンスです。 UnhandledException はコードが未処理の例外をスローした場合に発生します。
*UnhandledException* イベントのハンドラーを提供しない場合、またはそのハンドラーがイベントを処理済みとしてマークしない場合、 *UnhandledExceptions* はSilverlightアプリケーションを効果的にシャットダウンします。
画面のプラグイン領域が空白になり、スクリプトエラーがブラウザに報告されます。