TreeView. ItemContainerGenerator. ContainerFromItem возвращает пустой указатель для некорневых объектов. Обходное решение?

Интернационализация трудна, вот несколько вещей, которые я узнал из работы с 2 веб-сайтами, которые были на более чем 20 различных языках:

  • Использование UTF-8 везде. Никакие исключения. HTML, язык серверной стороны (не упускают PHP особенно), база данных, и т.д.
  • Никакой текст в изображениях, если Вы не хотите тонну работы. Используйте CSS для помещения текста по изображениям при необходимости.
  • Отдельная конфигурация от локализации. Тот путь localizers может перевести текст, и можно иметь дело с различными конфигурациями на локаль (функции, расположение, и т.д.). Вы не хотите, чтобы localizers имел способность смешать с Вашим приложением.
  • Удостоверяются, что Ваши разметки могут иметь дело с текстом, который в 2-3 раза более длинен, чем английский язык. И также на 50% меньше, чем английский язык (японский язык и китайский язык часто короче).
  • Некоторым языкам нужны большие размеры шрифта (японский язык, китайский язык)
  • , Цвета являются определенными для локали также. Красный и зеленый не означают того же самого везде!
  • Добавляют имя класса, которое является именем локали к тегу основного текста Ваших документов. Тем путем можно определить расположение определенной локали в файле CSS легко.
  • Не упускают подстановку переменных. Не разделяйте свои строки. Оставьте их целыми как это: "Вы имеете X новых сообщений" и заменяете 'X' #.
  • Различные языки имеют различную плюрализацию. 0, 1, 2-4, 5-7, с 7 бесконечностями. Трудно иметь дело с.
  • Контекст является трудным. Иногда localizers должен знать, где/как строка используется, чтобы удостовериться, что это переводится правильно.

Ресурсы:

6
задан CannibalSmith 6 October 2009 в 13:53
поделиться

1 ответ

Проблема в том, что каждый TreeViewItem сам по себе является ItemsControl , поэтому каждый из них управляет своими собственными контейнерами для своих дочерних элементов.

Однако есть одна особенность. очень простой способ делать то, что вы хотите: вместо регистрации в событии SelectedItemChanged зарегистрируйтесь в событии TreeViewItem.Selected , которое всплывет вместе с OriginalSource ] установлен на выбранный TreeViewItem .

XAML:

<TreeView ItemsSource="{StaticResource Array}" TreeViewItem.Selected="TreeViewItem_Selected">

Код позади:

private void TreeViewItem_Selected(object sender, RoutedEventArgs e) {
    TreeViewItem container = (TreeViewItem) e.OriginalSource;
    Title = container != null ? container.ToString() : "null";
}
10
ответ дан 10 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: