我正在本地化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命名空间。
为什么这种情况不起作用?我该如何克服它?
答案 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}
一样访问它。