Вот в чем дело:
У меня есть простое приложение WPF Windows, в которое я включил TreeView
, которое создается с помощью HierarchicalDataTemplate
и снабжается некоторыми иерархическими данными.
Иерархическая структура данных состоит из класса FakeRec, который содержит дочерние элементы в List<FakeRec>
. Каждый элемент содержит свойство строки заголовка.
Итак, в моем XAML у меня есть:
...
<HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type local:FakeRec}">
...
<TextBlock Grid.Column="0" Text="{Binding Path=Title}"/>
...
</HierarchicalDataTemplate>
...
Это отлично работает, и в сгенерированном TreeView
я вижу заголовок каждого узла.
Теперь я хочу сделать все это дерево локализуемым.
У меня есть свои ресурсы в FakeDirResources.Resx (в отдельной сборке, но это не имеет значения).
Если я сделаю это:
...
<HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type local:FakeRec}">
...
<TextBlock Grid.Column="0" Text="{Binding Path=Title, Source={StaticResource FakeDirResources}}"/>
...
</HierarchicalDataTemplate>
...
Мое дерево пустое (очевидно, потому что в моем файле FakeDirResources.resx
у меня нет ресурса с ключом Title
, но мне нужно использовать Title
другой привязки, разрешить его с помощью ресурсов, а затем каким-то образом связать результат с деревом.
Обратите внимание, что если я просто помещу TextBlock
в окно, без связи с деревом или с HierarchicalDataTemplate
, я могу без проблем привязать его к ресурсам, например:
<TextBlock Text="{Binding Path=games, Source={StaticResource FakeDirResources}}"/>;
Это прекрасно работает, выбирая строку, и если я изменю System.Threading.Thread.CurrentThread.CurrentUICulture
и обновлю свой провайдер, эта строка изменится на новый язык.
Вопрос в том, как мне объединить два? Что мне не хватает?
Я предполагаю, что должен быть какой-то трюк (и с моим коротким опытом работы с WPF это, вероятно, не простой трюк).
Ура!
Alon.