結論
-
\uffff
という風に4桁の16進数の前に\u
をつけたらOK
var label = new Label();
label.Text = "\ue8b6"; // Search icon
label.FontFamily = "Material";
概要
Xamarin.Formsでマテリアルデザインのアイコンを使いたいことがあると思います。
私の作成しているアプリでもマテリアルデザインのアイコンを使用していました。
基本的にはXAMLからすべて設定を行っていたのでしばらくは問題無く使えていたのですが、ある時どうしてもコードビハインドに処理を記述する必要が出てきました。
さらに、その処理の中でアイコンを使う必要があったのですが、XAMLで使用するときと同じように設定しても動きませんでした。
(XAMLで使う方法)
Xamarin.Forms でアイコンフォントを使う
上記記事にもあるように、XAMLの場合は以下のように指定します。
<Label Text="" FontFamily="Material"/>
上記でText
に指定している
ですが、このままコード側で指定しても動いてくれません。
e8b6
の部分はアイコンのIDのようなものなので、その前後についている奇妙な文字列に秘密がありそうです。
よくよく調べていると見つけました。
文字参照は 10 進数または 16 進数の文字番号を使って次のように記述します。
&#(10進数の文字番号);
&#x(16進数の文字番号);
XAMLというよりもXMLの仕様なんですね
ということで奇妙な文字列の意味はわかりました。
あとはコード側でどうやって表現するかですが、上記より16進数ということがわかったので16進数を文字列として表現する方法を探します。
\u 16進表記のUnicode文字
※「\u」に続けて16進数4桁を記述する
\u
で良さそうです。
ということで、XAMLでは
と指定していたものは\ue8b6
としてあげることで正しく表示されました!