【问题标题】:ToggleSwitch default oncontent/offcontent text does not get translated at runtimeToggleSwitch 默认 oncontent/offcontent 文本在运行时不会被翻译
【发布时间】:2019-05-08 20:40:39
【问题描述】:

在我的应用中,用户可以像这样在运行时切换语言:

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = language;

ResourceContext 之后也会被重置:

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

问题在于,除了默认的切换开关 OnContent 和 OffContent 文本(“on”和“off”)之外,所有内容都直接翻译。

是否可以在不重新启动应用且不为我的项目中的每个 ToggleSwitch 创建文本资源的情况下解决此问题?

【问题讨论】:

标签: c# resources uwp toggleswitch


【解决方案1】:

答案是否定的。见here,左杰已经在cmets中说过了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多