Silverlight 5 betaでマークアップ拡張が追加されました。ということで大分昔にWPFで書いたマークアップ拡張のハローワールドをSilverlightでもやってみようと思います。
ということで、SLMarkupExtensionと言う名前でSilverlightApplicationを新規作成します。ちゃんとSilverlight 5を選んでます。
WPFと同じ要領で、Hello worldを返すだけのマークアップ拡張のクラスを作ります。
namespace SLMarkupExtension { using System; using System.Windows.Markup; /// <summary> /// MarkupExtensionから継承して〜Extensionという名前のクラスを作る。 /// </summary> public class HelloWorldExtension : MarkupExtension { // ProvideValueでマークアップ拡張が返す値を組み立てる。 public override object ProvideValue(IServiceProvider serviceProvider) { // ここではHello worldって返すだけ return "Hello world"; } } }
System.Windows.Markup.MarkupExtensionクラスを継承してProvideValueをメソッドでマークアップ拡張が返す値を決めます。
ということで、早速使ってみます。MainWindow.xamlにSLMarkupExtension名前空間とlocalというxml名前空間を紐づけます。そしてTextBlockのTextプロパティで先ほど作ったHelloWorldマークアップ拡張を使ってます。
<UserControl x:Class="SLMarkupExtension.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" xmlns:local="clr-namespace:SLMarkupExtension" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <!-- 使ってみたよ〜 --> <TextBlock Text="{local:HelloWorld}" /> </Grid> </UserControl>
残念ながら自作マークアップ拡張にはインテリセンス効きませんでした・・・。
ちゃんとHello worldが表示されました。じゃぁWPFのと同じようにプロパティも指定できるのか見てみます。WPFのサンプルと同じようにPrefixプロパティをHelloWorldExtensionに追加します。
namespace SLMarkupExtension { using System; using System.Windows.Markup; /// <summary> /// MarkupExtensionから継承して〜Extensionという名前のクラスを作る。 /// </summary> public class HelloWorldExtension : MarkupExtension { // メッセージの前に表示させる文字列 public string Prefix { get; set; } // ProvideValueでマークアップ拡張が返す値を組み立てる。 public override object ProvideValue(IServiceProvider serviceProvider) { // ここではPrefix + Hello worldって返すだけ return this.Prefix + "Hello world"; } } }
XAML側でもPrefixを指定するようにします。マークアップ拡張のプロパティはインテリセンスが効きました。素敵。
<!-- 使ってみたよ〜 --> <TextBlock Text="{local:HelloWorld Prefix=ぷれふぃっくす}" />
実行してみると・・・ちゃんとPrefixで指定した文字列が表示されています。
以上、簡単にですがSilverlightでのマークアップ拡張のHello worldでした。プログラムは以下からダウンロードできます。(要Silverlight 5 Beta)