オワタ。
というのでは何なので、1つだけ残された拡張の道を歩んでみようと思います。最近まで存在を知らなかったCustomResourceというマークアップ拡張があります。こいつは、デフォルトでは動作しないかわりに、自分で独自の実装を差し込むことが出来るようになっています。やり方は以下の通り。
- CustomXamlResourceLoaderクラスを継承したクラスを作る
- GetResourceメソッドをオーバーライドして、状況に応じて返したい型を返すロジックを書く
- App.xaml.csのコンストラクタで以下の処理をする
- CustomXamlResourceLoader.Currentに自前クラスのインスタンスをつっこむ
実用的ではないですが、以下のようなCustomXamlResourceLoaderを継承したクラスを作ったとします。
using System; using System.Collections.Generic; using System.Text; using Windows.UI.Xaml.Resources; namespace App2 { publicclass MyCustomLoader : CustomXamlResourceLoader { protectedoverrideobject GetResource( string resourceId, string objectType, string propertyName, string propertyType) { returnstring.Join(", ", resourceId, objectType, propertyName, propertyType); } } }
そして、Appクラスのコンストラクタで、このMyCustomLoaderを使うように設定します。
public App() { CustomXamlResourceLoader.Current = new MyCustomLoader(); this.InitializeComponent(); this.Suspending += this.OnSuspending; }
あとはCustomResourceマークアップ拡張をかくだけです。適当に画面にTextBlockを置いて、Textプロパティに設定してみました。
<TextBlock Text="{CustomResource SampleCustomResource}" />
そうすると、TextBlockが以下のように表示されます。
まとめ
ドキュメントにも、普通つかわんだろみたいなことが書いてあったのですが、普通使わない感じですね・・・!誰得情報でした。