#wpf #localization
#wpf #локализация
Вопрос:
Я локализую приложение WPF. Заголовки столбцов datagrid необходимо изменять во время выполнения в соответствии с конкретной культурой пользовательского интерфейса в XAML.
Хотя я могу выполнить локализацию в исходном коде, а также в XAML, используя инструмент LocBaml. Я не могу достичь этого с помощью одного конкретного сценария в XAML. Сценарий заключается в том, что я анализирую XAML, поскольку загружаю его в файл XML и выполняю синтаксический анализ..
Итак, теперь, когда я разбираю это как:
<dg:DataGridColumnHeader Header="{x:Static findlocale:My.Resources.String.anylocalword}"></dg:DataGridColumnHeader>
Где findlocale является ключевым словом пространства имен XAML, я получаю сообщение об ошибке:
Ошибка синтаксического анализа XAML. Не удается найти тип
My.Resources.String.localword
в пространстве имен xaml.
Почему это не работает в этом сценарии? Как мне это преодолеть?
Ответ №1:
Я готов поспорить, что ваше пространство имен 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}
.