2017-06-26 45 views
3

我在做一个项目UWP我wan't格式化使用转换器和静态资源字符串字符串,因为应用程序在多张语言。如何通过静态资源字符串ConverterParameter在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(); 
     } 
    } 

在这里,在我的资源Strings.Xaml文件中的字符串:

<x:String x:Key="nbItems">You have {0} items...</x:String> 

这里,我wan't通过此格式的元素:

<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}"/> 

参数总是空在我的转换器,为什么它不工作?

回答

2

不完全确定为什么参数为空,但是,我想出了一个解决办法。将您的字符串移动到资源文件(see here)。

Resources file example

然后改变你传递给你的转换器将字符串名称参数,像这样:

<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); 
} 

希望这有助于。

+0

谢谢你的回答,我记住这个可能性,我不明白为什么它不起作用。 – fandro

+0

这是完美的工作谢谢,有没有办法将所有的字符串都传递给resw文件? – fandro

+0

不确定你的意思? – jsmyth886