ToggleSwitch текст по умолчанию для содержимого / отключения не переводится во время выполнения
В моем приложении пользователи могут переключать язык во время выполнения следующим образом:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = language;
ResourceContext также получает сброс после этого:
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();
Проблема в том, что все переводится напрямую, за исключением текста по умолчанию для переключателя OnContent & OffContent ("on" и "off").
Можно ли это решить без перезапуска приложения и без создания текстовых ресурсов для каждого переключателя ToggleSwitch в моем проекте?
0 ответов
Ответ - нет. Смотрите здесь, Джей Цзо уже заявил об этом в комментариях.
Поскольку поведение ToggleSwitch по умолчанию не будет отражать изменение языка во время выполнения, я решил это, написав конвертер, который получает перевод для конкретного языка из ResourceLoader и связывает OnContent
а также OffContent
свойства ToggleSwitch на его IsOn
свойство. Вы должны предоставить переводы текстов "Вкл." И "Выкл." В строковых файлах ресурсов для вашего языка.
Конвертер:
class BoolToToggleSwitchOnOffContentConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value is bool boolValue)
{
var resourceLoader = ResourceLoader.GetForCurrentView();
var resourceString = "ToggleSwitch" + (boolValue ? "On" : "Off");
return resourceLoader.GetString(resourceString);
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
// I'm afraid I can't do that, Dave!
throw new NotImplementedException();
}
}
XAML:
<ToggleSwitch
IsOn="{Binding SomeIsOnBinding, Mode=TwoWay}"
OnContent="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsOn, Converter={StaticResource BoolToToggleSwitchOnOffContentConverter}"
OffContent="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsOn, Converter={StaticResource BoolToToggleSwitchOnOffContentConverter}" />