【问题标题】:Is there any way to create a dynamic list of strings (based on language) in XAML (Silverlight)?有没有办法在 XAML(Silverlight)中创建一个动态的字符串列表(基于语言)?
【发布时间】:2010-04-15 00:28:30
【问题描述】:

只是想知道是否可以根据语言/文化在 XAML 中动态创建字符串列表?假设用户以英语用户身份登录,它会显示客户名称、订单号……如果用户以波兰用户身份登录,它会显示 Nazwa klienta、Numer zamówienia?

我只知道下面的硬编码:

        <System_Collections_Generic:List`1 x:Key="columnNameList">
            <System:String>Client Name</System:String>
            <System:String>Order Number</System:String>
            <System:String>Date</System:String>
        </System_Collections_Generic:List`1>

【问题讨论】:

  • 为什么不使用资源包?

标签: silverlight xaml internationalization multilingual


【解决方案1】:

我建议使用资源文件和标记扩展。在资源文件中,您创建字符串资源,并为每种语言制作本地化资源文件。在标记扩展中,您只需从资源中返回字符串的值(它会自动从卫星资源程序集中为当前文化选择适当的语言)。

标记扩展

[MarkupExtensionReturnType(typeof(string))]
public class ResourceString : MarkupExtension
{
    [ConstructorArgument("resourceKey")]
    public string ResourceKey { get; set; }

    public ResourceString(string resourceKey)
    {
        this.ResourceKey = resourceKey;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        // Assuming your resource file is named StringResources.resx
        return StringResources.ResourceManager.GetString(ResourceKey);
    }
}

XAML

    <local:ListOfStrings x:Key="columnNameList">
        <local:ResourceString ResourceKey="ClientName" />
        <local:ResourceString ResourceKey="OrderNumber" />
        <local:ResourceString ResourceKey="Date" />
    </local:ListOfStrings>

顺便说一句,您不能在 XAML 中使用泛型(好吧,您可以在 XAML 2009 中使用,但在 VS 中尚不支持)。所以你需要创建一个代表字符串列表的非泛型类:

public class ListOfStrings : List<string> { }

【讨论】:

  • 感谢这位 Thomas,但这是否适用于 Sliverlight?据我所知,MarkupExtension 在 Silverlight 中不可扩展?
  • 哦,我错过了您使用 Silverlight 的事实,我假设 WPF...您无法在 Silverlight 中创建自定义标记扩展,抱歉...
  • 那我只能另谋出路了,还是谢谢你的帮助!
猜你喜欢
  • 2021-10-25
  • 2023-01-12
  • 1970-01-01
  • 2022-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
相关资源
最近更新 更多