ToggleSwitch默认的oncontent / offcontent文本在运行时不会被翻译

时间:2017-03-30 11:15:37

标签: c# resources uwp toggleswitch

在我的应用中,用户可以在运行时切换语言,如下所示:

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = language;

之后,ResourceContext也会被重置:

Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();

问题是除了默认的toggleswitch OnContent& OffContent文本(" on"&" off")。

如果不重新启动应用程序并且不为我的项目中的每个ToggleSwitch创建文本资源,是否可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

答案是否定的。请参见here,周杰伦(Jay Zuo)已在评论中指出了这一点。

由于ToggleSwitch的默认行为不会反映运行时的语言更改,因此我编写了一个转换器,从ResourceLoader获取特定语言的翻译,并绑定了OnContentOffContent属性,从而解决了这一问题。 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}" />