如何在UWP

时间:2017-06-26 09:49:00

标签: c# xaml uwp

我正在做一个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}"/>

我的转换器中的参数总是为空,为什么它不起作用?

1 个答案:

答案 0 :(得分:2)

不完全确定参数为空的原因,但我提出了一种解决方法。将字符串移动到资源文件(see here)。

Resources file example

然后将传递给转换器的参数更改为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);
}

希望这有帮助。