XAMLについて
前々エントリの
をXAMLで(面倒と言うか書き方が分からなかったのでランダムになってるところを固定にして)書き直すと
Chart -Width 300 -Height 250 -Theme Theme3 -Watermark $false -Animation $true -Series (
DataSeries -DataPoints $(
1..(Get-Random -min 3 -max 6) | ForEach-Object { DataPoint -YValue (Get-Random 100) }
)
) | Boots
<vc:Chart xmlns:vc="clr-namespace:Visifire.Charts;assembly=WPFVisifire.Charts" Width="300" Height="250" Theme="Theme3" Watermark="False" AnimationEnabled="True"> <vc:Chart.Series> <vc:DataSeries> <vc:DataSeries.DataPoints> <vc:DataPoint YValue="10" /> <vc:DataPoint YValue="20" /> </vc:DataSeries.DataPoints> </vc:DataSeries> </vc:Chart.Series> </vc:Chart>
こういう感じで、C#で書くとこうなる。
Chart chrt = new Chart() { Width = 300, Height = 250, Theme = "Theme3", Watermark = false, AnimationEnabled = true, }; DataSeries ds = new DataSeries(); ds.DataPoints.Add(new DataPoint() { YValue = 10 }); ds.DataPoints.Add(new DataPoint() { YValue = 20 }); chrt.Series.Add(ds);
本当は、C#でもオブジェクトのnewのみで再現したかったんだけど、ObservableCollection
普段仕事ではASP.NETばかり触ってるので、XAMLもその延長線上的なイメージで捉えてたんだけど、やっぱり全然違うものだなー。aspxファイルはどこまで行っても、htmlに埋め込まれた要素をプログラムから扱える、という感じで捉えるのが妥当なところだろうと思うけど、XAMLはUIを表現しやすい形でインスタンス生成を指示できるというか。
『エッセンシャルWPF:Windows Presentation Foundation (Programmer's SELECTION)』P11。
ごく簡単に言うと、XAMLはCLRオブジェクトのためのXMLベースのインスタンス化スクリプトです。XMLのタグとCLRの型、およびXMLの属性とCLRのプロパティおよびイベントは、それぞれ対応しています。
PowerShellはCLRオブジェクトを作るのにNew-Objectをつかうしかなくて、美しくないというか、あれやで、というところがあったので、PowerBootsのオブジェクト生成関数を作ってくれる、PowerBootsの機能はWPF使う以外にも便利な場面が一杯ありそう。