XAMLマークアップだけでできること
以下の3通りのようです。
区分
|
方法
|
機能
|
HTMLエディタ
|
XAMLスクリプト |
HTML中にスクリプトとしてXAMLマークアップを書く。
これをobjectタグでSilverlightコンポーネントに渡す。 |
Silverlightの機能から、入力
関連を除いたもの |
表示されない |
XAMLファイル
(objectタグ) |
XAMLマークアップを独立したファイルを書く。
これをobjectタグでSilverlightコンポーネントに渡す。 |
Silverlightの機能から、入力
関連を除いたもの |
表示されない |
XAMLファイル
(iframeタグ) |
XAMLマークアップを独立したファイルを書く。 |
フル機能(これは、Silverlightのランタイムでなく、.Net Frameworkのランタイムが使われるようだ) |
表示される |
1.利点と欠点
区分
|
利点
|
欠点
|
XAMLスクリプト |
描画が早い |
・XAMLの記述能力が低い
・HTMLの編集時に表示されない
・XAML部分の編集が困難 |
XAMLファイル
(objectタグ) |
XAMLエディタで編集し易い |
・XAMLの記述能力が低い
・HTMLの編集時に表示されない
・クロスドメインの制限(HTMLと同じ場所にあることが必要) |
XAMLファイル
(iframeタグ) |
・XAMLの記述能力が高い
・XAMLエディタで編集し易い
・クロスドメインの問題はない
・Silverlightのインストールが必要ない |
・遅い
・サーバーがMIMEタイプをサポートする必要がある |
※サーバーのMIMEタイプ設定
.htaccess が利用可能なら、
Addtype application/xaml+xml .xaml
2.何ができるか
- Buttonやマウスのイベントを利用することができます。
- CheckBoxやTextBoxの入力値を他に代入することはできます。
- アニメーションの機構でUIエレメントのプロパティを操作します。
- 変数は利用できません。
- 演算もできません。
このことから、double 型を操作するプログラムなら作れる可能性があります。
経過時間を座標として表すことができそうです。
3.利用できる仕組み
XAMLマークアップ記述では、演算をしたり変数を割り当てたりすることはできませんが、以下のようなことができます。
3.1.文字列や数式
文字列や数式は、どの方法でも大差なく利用可能です。
これらの数式は、このHTMLページのスクリプトとして記述してあります。ブラウザの機能でソースを表示すると見ることができます。
3.2.図形
2Dの図形は、どの方法でも大差なく利用可能です。3Dは、IFRAMEで開く方法でしか利用できません。
左図は、このHTMLページのスクリプトとして記述してあります。ブラウザの機能でソースを表示すると見ることができます。
3.3.図形を動かす
アニメーションの仕組みを使います。アニメーションの記述は、もともとSilverligt と WPF で異なります。
記述方法に差はありますが概ね同じようなことができると思います。
時間変化を、辺の長さや角度の変化に置き換えられるものが描画可能です。
3.4.入力を利用
IFRAMEで開く方法でのみ可能です。DataTrigger を使って、CheckBox などのチェック状態をトリガして、自身や他のUIエレメントのプロパティを取得、設定できます。
できることは、値の取得、設定であって、演算することはできないことに注意します。
4.ポップアップで表示
IFRAMEでXAMLを表示するのは時間がかかります。現状では、この例のように、説明文を付加して、ユーザの意思で開いてもらう方法が良いように思います。
左図をクリックすると別窓で、Loose XAMLのサンプルをロードします。
「Button」をクリックすると、文字列をアニメーション表示します。
http://hp.vector.co.jp/authors/VA039696/xaml/animate_text1.xaml
4.1.XAMLファイルの概要
StackPanel に Canvas と Button が配置してあります。
Canvas に ellipse と 2つのTextBlock を描画します。
- <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="Loose XAML example">
- <StackPanel>
- <Canvas Width="200" Height="200" Background="Gainsboro">
- <Ellipse Canvas.Left="20" Canvas.Top="100" Width="80" Height="80" Fill="Tomato"/>
- <TextBlock Name="tb1" Canvas.Left="30" Canvas.Top="30" Foreground="DarkSlateGray" />
- <TextBlock Name="tb2" Canvas.Left="170" Canvas.Top="40" Foreground="Firebrick"
- Text="{Binding ElementName=tb1, Path=Text}">
- <TextBlock.RenderTransform>
- <RotateTransform Angle="90"/>
- </TextBlock.RenderTransform>
- </TextBlock>
- </Canvas>
- <Button Name="button1" Content="Button" />
- <StackPanel.Triggers>
- <EventTrigger RoutedEvent="Button.Click" SourceName="button1">
- <BeginStoryboard>
- :
- </BeginStoryboard>
- </EventTrigger>
- </StackPanel.Triggers>
- </StackPanel>
- </Page>
4.2.ButtonのClickイベントの検出
Button には button1 と名前が付けてあります。
<StackPanel.Triggers> で、button1 の Click イベントの処理を書きます。
4.3.Click イベントの処理
Storyboard として、イベントの処理を記述します。
- <Storyboard>
- <StringAnimationUsingKeyFrames
- Storyboard.TargetName="tb1"
- Storyboard.TargetProperty="(TextBlock.Text)"
- Duration="0:0:8" FillBehavior="HoldEnd">
- <DiscreteStringKeyFrame Value="" KeyTime="0:0:0" />
- <DiscreteStringKeyFrame Value="m" KeyTime="0:0:1" />
- <DiscreteStringKeyFrame Value="mi" KeyTime="0:0:1.5" />
- <DiscreteStringKeyFrame Value="mik" KeyTime="0:0:2" />
- <DiscreteStringKeyFrame Value="mike" KeyTime="0:0:2.5" />
- <DiscreteStringKeyFrame Value="mikeo" KeyTime="0:0:3" />
- <DiscreteStringKeyFrame Value="mikeo_" KeyTime="0:0:3.5" />
- <DiscreteStringKeyFrame Value="mikeo_4" KeyTime="0:0:4" />
- <DiscreteStringKeyFrame Value="mikeo_41" KeyTime="0:0:4.5" />
- <DiscreteStringKeyFrame Value="mikeo_410" KeyTime="0:0:5" />
- <DiscreteStringKeyFrame Value="mikeo_410 " KeyTime="0:0:5.5" />
- <DiscreteStringKeyFrame Value="mikeo_410 t" KeyTime="0:0:6" />
- <DiscreteStringKeyFrame Value="mikeo_410 te" KeyTime="0:0:6.5" />
- <DiscreteStringKeyFrame Value="mikeo_410 tes" KeyTime="0:0:7" />
- <DiscreteStringKeyFrame Value="mikeo_410 test" KeyTime="0:0:7.5" />
- </StringAnimationUsingKeyFrames>
- </Storyboard>
tb1 と 名前の付いた TextBlock の Text プロパティを指定して、文字列を時間差を付けて書き込みます。
|