如何在XAML中使用转换器对硬编码值进行转换

4

我有一个 Windows Phone 应用程序,想要将其本地化。因为我从服务器上运行时下载翻译,所以不能使用 AppResources。我想要做的是创建一个转换器,将键转换为翻译值中的字符串。 类似于:

    Text="{"STRING_OK", Converter={StaticResource TranslationConverter}}"

当然,这段代码无法编译,但有没有解决方法?我该如何使用转换器来转换硬编码的值?

3
从技术上讲,转换器仅在绑定上下文中使用。没有绑定,就没有转换器。我认为你的问题可以通过使用一些自定义标记扩展来解决,该扩展接受一个输入字符串,然后根据目标文化将字符串转换为其他值。 - King King
1
正如@KingKing所说,必须使用MarkupExtension完成。请查看以下链接:
  1. https://dev59.com/KGUq5IYBdhLWcg3wKtRL#14839496
  2. http://wpftutorial.net/LocalizeMarkupExtension.html
- Carbine
2个回答

5

另一个可能的解决办法比创建MarkupExtension更简单,就是将硬编码的值设置为转换器参数。无论如何,正如@KingKing所指出的那样,我们仍需要绑定才能使用Converter。我们可以让转换器忽略通过绑定传递的值,只考虑ConverterParameter在转换逻辑中的作用:

Text="{Binding Converter={StaticResource TranslationConverter}, 
               ConverterParameter=STRING_OK}"

很奇怪,我没必要创建一个虚拟字符串它就能正常工作。你可以分享一下你尝试过的绑定语句吗? - har07
1
你说得对,我没有正确使用ConvertParameter(我将参数作为字符串传递了)。谢谢。 - Dacian Mujdar

1
你无法为不同语言创建固定数量的AppResources,因为你的情况是动态翻译过程,但你仍然可以为硬编码字符串值创建单个AppResource文件,然后使用我们自己的转换器。

文本="{Binding Path=LocalizedResources.TextLabelLocale, Source={StaticResource LocalizedStrings},Converter={StaticResource TranslationConverter}}"

public class LocalizedStrings { public LocalizedStrings() { }

    private static sdkGlobalizationCS.AppResources localizedResources = new sdkGlobalizationCS.AppResources();

    public sdkGlobalizationCS.AppResources LocalizedResources { get { return localizedResources; } }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接