Локализация в WPF

#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} .