【问题标题】:How to use a converter on a hard-coded value in xaml如何在 xaml 中对硬编码值使用转换器
【发布时间】:2014-09-18 10:43:27
【问题描述】:

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

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

当然,这段代码不能编译,但有解决办法吗?我如何将转换器用于硬编码值?

【问题讨论】:

  • 从技术上讲,转换器仅在绑定上下文中使用。没有绑定,没有转换器。我认为您的问题可以通过使用一些接受输入字符串的自定义 MarkupExtension 来解决,然后它会根据目标文化将字符串转换为另一个值。
  • 正如@KingKing 所说,必须使用 MarkupExtension 来完成。浏览这些链接- 1.stackoverflow.com/a/14839496/442444 2.wpftutorial.net/LocalizeMarkupExtension.html

标签: c# .net wpf xaml windows-phone-8


【解决方案1】:

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

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

【讨论】:

  • 这很奇怪,对我来说工作得很好,而不必创建一个虚拟字符串。您能分享一下您尝试过的绑定声明吗?
  • 你是对的,我没有正确使用 ConvertParameter(我将参数作为字符串传递)。谢谢
【解决方案2】:

您无法为各种语言创建固定数量的 AppResource,因为您的案例是一个动态翻译过程,但您仍然可以为硬编码的字符串值创建单个 Appresource 文件,然后您可以使用我们自己的转换器。

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

公共类 LocalizedStrings { 公共本地化字符串() { }

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

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

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2010-10-28
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多