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}" />
Другие вопросы по тегам