在WPF中本地化

时间:2011-10-18 04:54:07

标签: wpf localization

我正在本地化WPF应用程序。需要根据XAML中的特定UI文化在运行时更改datagrid列标题。

虽然我可以使用LocBaml工具在后面的代码中进行本地化,也可以在XAML中进行本地化。我无法通过XAML中的一个特定场景实现它。场景是我正在解析XAML,因为我将它加载到XML文件并解析..

所以现在当我解析它时:

<dg:DataGridColumnHeader Header="{x:Static findlocale:My.Resources.String.anylocalword}"></dg:DataGridColumnHeader>

如果findlocale是XAML名称空间关键字,我收到错误:

  

XAML解析错误。找不到类型My.Resources.String.localword   xaml命名空间。

为什么这种情况不起作用?我该如何克服它?

1 个答案:

答案 0 :(得分:2)

我愿意打赌你的findlocale XML命名空间不正确。如果你有类似的东西:

namespace MyNameSpace.MySubNamespace {
    public class MyClass {
        public static string MyProperty { get; set; }
    }
}

然后必须将您的XML名称空间声明为xmlns:findlocale="clr-namespace:MyNameSpace.MySubNamespace",以便使用{x:Static findlocale:MyClass.MyProperty}

无法声明您的XML名称空间,如xmlns:findlocale="clr-namespace:MyNameSpace",并将其用作{x:Static findlocale:MySubNamespace.MyClass.MyProperty}

此外,如果您有任何嵌套的类/枚举,则必须使用+符号代替.。所以如果你有:

namespace MyNameSpace.MySubNamespace {
    public class MyClass {
        public class MyNestedClass {
            public static string MyProperty { get; set; }
        }
    }
}

要访问MyProperty,您需要声明您的XML名称空间,如xmlns:findlocale="clr-namespace:MyNameSpace.MySubNamespace",并像{x:Static findlocale:MyClass+MyNestedClass.MyProperty}一样访问它。