【Xamarin.Forms 2.3プレビュー】Xamarin.Forms Themesを触ってみた
Evelve 2016で紹介されたXamarin.Forms Themesが(ようやく)NuGetに配信されました。 中身のdllを見る限り、現時点ではiOS、Androidのみ対応しているようですね。
早速試した方がいらっしゃいます!
Xamarinメモ その18 Xamarin.Forms.ThemesをPrism.Unity.Formsと併用する場合の注意 – A certain engineer "COMPLEX"
僭越ながら補足させていただくと...
補足1
App.xamlの追加方法は @omanuke さんの記事を参考にすると良いでしょう。
補足2
「assemblyがロードされない場合」が発生する理由は、XAMLしか参照していないassemblyはリンカが依存関係を検出できないためアプリパッケージにプラットフォーム実装dllが含まれなくなるからです。
よって、コードビハインドでテーマのResourceDictionaryを追加するか、公式ドキュメントのようにダミーコードを入れることで回避できます。単にテーマを使いたいだけならAppクラスのコンストラクタで Resources = new Xamarin.Forms.Themes.DarkThemeResources();
とするのが簡単です。
Xamarin.Forms Themesの中身
Themesは2種類のNuGetパッケージで構成されています。
- Xamarin.Forms.Theme.Base
- Xamarin.Forms.Theme.Light / Dark
それぞれどいう役割なのか少し覗いてみました。
Xamarin.Forms.Theme.Base
Baseには色などのリソースは定義されておらず、以下の物を提供します。
- 角丸やシャドウなどのスタイルを適用するためのEffect
- Effectの設定値(影の大きさ等)を保持するためのAttachedProperty
まさに Xamarin.Formsの公式ブログ で紹介されていたようなカスタムスタイルですね。
Xamarin.Forms.Theme.Light / Dark
以下のものを内包したカスタムResourceDictionaryを提供します。
- カラーテーマ
- カラーテーマに基づく、標準コントロールのスタイル
- 標準コントロールの拡張スタイル(角丸Imageなど、StyleClassで適用)
- DataPagesのコントロール用のDataTemplate
個人的にはDataPagesコントロール用のDataTemplateは別のdllにした方が良いように思うんですが...
ThemesとDataPegesを合わせてAndroidのマテリアルデザインのような物を作ろうとしているのでしょうか。
感想
統一感のあるクールなUIを簡単に構築できるのはとても魅力的です。 一方、リソースキーやスタイルクラスの名前を知らないと、使用やカスタマイズできないのが辛いように思えます。(ドキュメントとして公開されるか、ソース解析しないとわからない。)