2017-06-26 91 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