WEBのページを作る
XAMLマークアップ、あるいはXAMLスクリプトをウエブ・ブラウザで表示する方法を考えて見ます。
XAMLを利用する目的
- 数式を記述したい
- 図形を記述したい
- 図形が動くようにしたい
実現方法
方法
|
複数ページのSilverlightアプリ
ケーションが作成できる
|
一括してダウンロードされる |
1つ1つのページをパッケージ
(XAP)にする |
手間だが不要なダウンロードない
ただし、カットアンドペーストなど、操作
性がHTMLのページと違いすぎる。
|
普通のSilverlightの使い方 |
|
ブラウザはXAMLを開ける |
Silverlightの制約なし |
HTMLページ中のフレームに
表示 |
|
HTML中にscriptタグでXAML
記述を埋め込む |
|
-
-
Silverlightアプリケーション単一ページ
Visual Studioで普通にSilverlightアプリケーションを作成すると、.xap と、それをホストするHTMLファイルが作られる。
そして、Silverlightアプリケーションがページとしてブラウザに表示されるが、これは、HTMLファイルに他の要素が記述されていないためで、Silverlightをページにするのと、パーツにするのには区別はない。
記述方法は、Visual Studio が作る TestPage.htm を見るとわかる。
Silverlightアプリケーションについては、このページの先頭の目次から、「プログラミング Tips」「Silverlight」以下を参照。
-
SilverlightアプリケーションHTMLに埋め込む
Silverlightアプリケーション単一ページに同じ
-
XAMLファイルをリンク
通常、HTMLファイル名を記述する箇所に、XAMLファイル名を書いてリンクとして開くことができる。
これは、ブラウザがXAMLファイルを開ける場合で、ブラウザや設定によっては開けない。
下記は、XAMLファイルを直接リンクしてある。
xps_math_test.xaml
この場合のXAMLの処理は、Silverlightのランタイムでなく、.Net Frameworkが使われる。
-
XAMLファイルをHTMLのIFRAMEでホストする
ブラウザはXAMLを開けるので、IFRAMEでも開ける。
HTMLページの一部として使える以外は、基本的にXAMLファイルを直接リンクした場合と区別はない。
「 IFRAMEタグによるXAMLファイルの参照」
-
XAML記述をHTMLに埋め込む
この方法は、HTMLファイル中にスクリプトとして、XAMLを記述しておき、objectタグで実行するものです。
objectタグの記述は、Silverlightアプリケーションをホストする場合と同じです。
したがって、処理はSilverlightのランタイムに依存し、XAMLの機能もSilverlightの制限によります。
「 HTMLファイルにXAMLを記述」
Silverlightアプリケーションの起動に使われるJavaScriptから呼び出す、Silverlight.createObject() かSilverlight.createObjectEx() も使用できます。
XAMLの機能制限
ブラウザで表示する場合のXAMLには3段階の制限があるようです。
- Loose XAML
ブラウザで直接開く場合と、IFRAMEタグで開く場合はフルセットで使用できるようです。Viewport3Dも可能です。
- Silverlight
Silverlightアプリケーションで利用する場合は、Silverlight用のサブセットになります。
- オブジェクトタグで開くXAMLスクリプト
まだ、良くわからないが開けないものがあります。(エラーになるわけではなく、単に全体が表示されなくなる。)
項目
|
原因
|
{Binding ... } |
|
DataTrigger |
Silverlightで未サポート |
EventTrigger SourceName |
|
Button |
|
CheckBox |
|
TextBlock |
Textの内容は表示されるが、入力にはならない |
createObject() と object タグ
createObject()
Silverlight.js にある createObject() 、createObjectEx() は、div タグの child に object を生成するもののようです。
source には、URL か #id の形式でファイル内のXAMLスクリプトが指定できます。
- <div id="div_sl01"></div>
- <script type="text/javascript">
- Silverlight.createObjectEx({
- source: "#xamlScript1",
- parentElement: document.getElementById("div_sl01"),
- id: "sl01",
- properties: { width: '100%', height: '100%', version: '1.1' },
- events: {}
- });
- </script>
これを 開いて FireFox の FireBug で見ると以下のようになっています。
- <div id="div1">
- <object height="100%" width="100%" id="sl01" data="data:application/x-silverlight,"
- type="application/x-silverlight">
- <param value="#xamlScript1" name="source">
- </object>
- </div>
XAMLをホストする object タグ
前述のスクリプトが作る簡単な object タグで表示には十分なようですがもう少し。
Visual Studio が Silverlightアプリケーション用に生成するHTML
- <form id="form1" runat="server" style="height:100%">
- <div id="silverlightControlHost">
- <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
- <param name="source" value="ClientBin/SilverlightApplication.xap"/>
- <param name="onError" value="onSilverlightError" />
- <param name="background" value="white" />
- <param name="minRuntimeVersion" value="4.0.50401.0" />
- <param name="autoUpgrade" value="true" />
- <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">
- <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
- </a>
- </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
- </form>
source パラメータを書き換えて、XAMLを参照して見ました。form と iframe の意味はわかりません。削除しても表示に差がないようです。
この場合、始めから object タグで書かれていますが、Silverlight.js もインポートされています。
HTMLDo で object タグを書くと
編集に使っている エディタ(HTMLDo)で、ソース表示にして object タグを書いて見ました。理屈はわかりませんが、ブラウザコンポーネントが、これを展開してしまします。
この展開された記述では表示が行われません。
type="application/x-silverlight" を設定すると、設定可能なparamを列挙しているようです。data="data:application/x-silverlight,"は、記述すると以降が崩れて記述不能です。
どのパラメータが不適切なのか調べて見ました。
- <object type="application/x-silverlight">
- <param name="_cx" value="5080">
- <param name="_cy" value="5080">
- <param name="Background" value="">
- <param name="EnableFramerateCounter" value="0">
- <param name="EnableCacheVisualization" value="0">
- <param name="EnableRedrawRegions" value="0">
- <param name="Source" value="">
- <param name="MaxFramerate" value="60">
- <param name="Windowless" value="0">
- <param name="OnError" value="">
- <param name="OnFullScreenChanged" value="">
- <param name="OnResize" value="">
- <param name="OnZoom" value="">
- <param name="OnLoad" value="">
- <param name="InitParams" value="">
- <param name="Culture" value="">
- <param name="UICulture" value="">
- <param name="EnableHtmlAccess" value="-1">
- <param name="AllowHtmlPopupWindow" value="-1">
- <param name="SplashScreenSource" value="">
- <param name="OnSourceDownloadComplete" value="">
- <param name="OnSourceDownloadProgressChanged" value="">
- <param name="MinRuntimeVersion" value="">
- <param name="AutoUpgrade" value="">
- <param name="EnableGPUAcceleration" value="0">
- <param name="EnableAutoZoom" value="0">
- <param name="EnableNavigation" value="">
- </object>
以下は、有効な値である必要があるようです。
- <param name="Source" value="#xamlScript1">
- <param name="Background" value="#f0f0f0">
- <param name="MinRuntimeVersion" value="4.0.50401.0">
|