在我的应用中,用户可以在运行时切换语言,如下所示:
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = language;
之后,ResourceContext也会被重置:
Windows.ApplicationModel.Resources.Core.ResourceContext.GetForViewIndependentUse().Reset();
问题是除了默认的toggleswitch OnContent& OffContent文本(" on"&" off")。
如果不重新启动应用程序并且不为我的项目中的每个ToggleSwitch创建文本资源,是否可以解决这个问题?
答案 0 :(得分:0)
答案是否定的。请参见here,周杰伦(Jay Zuo)已在评论中指出了这一点。
由于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}" />