ToggleSwitch.Contentのローカライズ
提供されているリソースを上書きしてデータテンプレートを使ってかなり面倒なことをやるのかな、と思ったのだが存外簡単だった。
ローカライズ用のリソースを用意する
状態二値である"On"と"Off"をキーに持つリソースを用意する。取り敢えずインバリアントと日本語(ja-JP)を用意した。
キー | 値 |
---|---|
On | On |
Off | Off |
インバリアント(Resource.resx)
キー | 値 |
---|---|
On | オン |
Off | オフ |
ja-JP(Resource.ja-JP.resx)
リソースは「埋込リソース」として.Designer.csが生成されるようにしておく。
値コンバータクラスを用意する
ToggleSwitchはContentControlの継承クラスだがこのクラスは内部にConverterプロパティを持つことで、スイッチの値に対応したコンテンツの値コンバータの実装を挿げ替えることができる(素晴らしい設計だと思う)
用意するのはIValueConverterインタフェースを実装したクラスである。
- BoolToOnOffConverter.cs
public class BoolToOnOffConverter : IValueConverter { private readonly string _offValue = Resource.Off; private readonly string _onValue = Resource.On; public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) { return _offValue; } else { return value.Equals("On") ? _onValue : _offValue; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return value != null && value.Equals(_onValue); } }
XAML上でコンバータをバインドする
あとは用意したコンバータを使ってContentプロパティ内部のConverterプロパティを変えてやれば良い。そのためにXAMLのStaticResource輪要素でBoolToOnOffConverterクラスのインスタンスを用意しておく。
XAML(リソース定義部)
XAML(Converterプロパティのバインド記述部)
通常の.NETローカライズであればここまでで作業は完了と言いたい所だが、Windows Phone 7の場合は更に一手間必要だ。
プロジェクトファイル(.csprj)のサポートカルチャを修正する
該当のプロジェクトファイル(.csprj)をエディタで開いて、サポートされるカルチャを直接記述する
: <SupportedCultures>ja-JP,</SupportedCultures> :