我正在做一个UWP项目,我不想使用转换器和静态资源字符串格式化字符串,因为应用程序是多种语言。
这是我的转换器:
public class StringFormatConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value == null)
return null;
if (parameter == null)
return value;
return string.Format((string)parameter, value);
}
public object ConvertBack(object value, Type targetType, object parameter,
string language)
{
throw new NotImplementedException();
}
}
这是我的Resource Strings.Xaml文件中的字符串:
<x:String x:Key="nbItems">You have {0} items...</x:String>
这里是我不想通过这个格式化程序的元素:
<TextBlock Text="{x:Bind NbItems, Converter={StaticResource StringFormatConverter}, ConverterParameter={StaticResource nbItems}, Mode=OneWay}"/>
它没有用,但如果我喜欢它,它可以工作:
<TextBlock Text="{x:Bind NbItems, Converter={StaticResource StringFormatConverter}, ConverterParameter='You have {0} items..', Mode=OneWay}"/>
我的转换器中的参数总是为空,为什么它不起作用?
答案 0 :(得分:2)
不完全确定参数为空的原因,但我提出了一种解决方法。将字符串移动到资源文件(see here)。
然后将传递给转换器的参数更改为String Name,如下所示:
<TextBlock Text="{x:Bind NbItems, Converter={StaticResource StringFormatConverter}, ConverterParameter='FORMAT', Mode=OneWay}" />
最后更改转换器以使用如下参数加载资源:
public object Convert(object value, Type targetType, object parameter, string language) {
if (value == null)
return null;
var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
var str = loader.GetString((string)parameter);
return string.Format(str, value);
}
希望这有帮助。