Вопрос

У меня есть контроль, который мы могли бы идентифицировать как аналогично управление списком. Каждый элемент представлен одним элементом (пример TextBlock). То, что я хотел бы изменить планировку этого элемента, чтобы он содержит два текстовых блока. Поэтому я создаю ControlTemplate, поставьте границу сетки, двукратные блоки, и все хорошо. Теперь проблема:

Мне нужно иметь возможность локализовать текст в элементе, и я сделал это нормально так:

<... Text="{Binding Strings.SomeString, Source={StaticResource ApplicationResources}}" />
.

Теперь мне нужно иметь возможность сделать то же самое с обоими текстовыми блоками. Поэтому я подумал, что мне нужно создать пользовательский тип, на который этот элемент будет связывать, и выдержать два Propertiesws: Название и описание. Если я выставим эту свойства как тип строки, все работает нормально, но я теряю привязку разметки, которую я использовал ранее. Как достичь того же с двумя свойствами? Результат должен быть как:

<... Title="{Binding Strings.SomeString, Source={StaticResource ApplicationResources}}", Description="{Binding Strings.AnotherString, Source={StaticResource ApplicationResources}}" />
.

Я смог сделать работу локализации с классом ResourceMManager, но она становится даже сложной, чтобы предоставить локализацию динамически применяться во время выполнения.

Так, что мне нужно сделать, чтобы иметь возможность использовать выше код? Тогда мне просто нужно реализовать inotifyPropertyChanged на ApplicationResource и все установлено.

Это было полезно?

Решение

Отлично!

Я собираюсь сделать то же самое, что ты сделал здесь. Да, у меня есть решение, но я не уверен, что он работает до сих пор.

Во-первых, нам нужен локализаторманаджер, который удерживает словарь.

Например, если вам нужно локализовать окно учетной записи пользователя, просто сделайте это

<TextBlock Text="something, UsernameKey">
.

и локализация MOQUALAGINAGER будет настроить usernamekeke к "Имя пользователя" или другому языку

Второе, расширение XAML, которое находит значение ключа от локализацииManager.

Интересно, может ли это пользовательское расширение может быть получено от расширения связывания, если это так, это будет очень просто, просто создайте объект привязки к цели. Если нет, я думаю, что удерживая слабую ссылку на Uilement по расширению XAML к динамическому обновлению, текст является правильным.

Это решение простое, но не общее. Там какой-то язык читается справа налево. Он просит заявку показать контент справа налево.

Итак, у меня есть еще одно общее решение, но более сложный.

вместо расширения XAML мы используем свойство подключения зависимости.

Делай это так:

<TextBlock LocalizationManager.LocalizationKey="UsernameKey" />
.

Итак, проблема сейчас - как установить «текстовое» свойство по локализацииМаджеру?

Мы используем адаптеры, локализацияManager будет искать правильный адаптер для типа «TextBlock»

Так, когда приложение загружается, мы регистрируем некоторые адаптеры к локализацииManager:

LocalizationManager.Current.RegisterAdapter<TextBlock>(new TextBlockAdapter())
.

Это решение более общего, он поддерживает любой тип контроля, если вы предоставляете адаптер, но, как вы видите, это решение требует большего работы и гораздо более сложного, чем прежний.

Я надеюсь, что эти проектные решения могут помочь вам ~

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top