有没有办法在XAML(Silverlight)中创建一个动态的字符串列表(基于语言)?

时间:2010-04-15 00:28:31

标签: silverlight xaml internationalization multilingual

只是想知道是否可以根据语言/文化动态创建XAML中的字符串列表?假设用户以英语用户身份登录,它显示客户名称,订单号...如果用户以波兰语用户身份登录,则会显示Nazwa klienta,Numerzamó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>

1 个答案:

答案 0 :(得分:0)

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

标记扩展程序

[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> { }