Использование multibinding.stringformat в Codebehind
-
28-09-2019 - |
Вопрос
У меня есть это приложение, которое имеет динамическое переключение языка встроенным. На основании выбранной культуры строки на протяжении всего приложения изменится. Переведенные строки и их исходные значения выходят из файлов ресурсов. Я использую привязки для прикрепления значений ресурсов к кнопкам, этикеткам и т. Д. Большая часть этого связывания происходит в коде позади.
Я смог объединить локализованные строки с данными, используя свойство Binding.StringFormat:
mybinding.StringFormat = "# {0}";
для "# предметов". Моя проблема заключается в том, что мне теперь нужно объединить две (или более) локализованные строки в коде. Я быстро понял, что смогу использовать Multibinding и добавлять свои привязки к нему, сохраняя то, как дела в настоящее время работают, однако, используя Multibinding.StringFormat, не работает. Я пытаюсь использовать myMultiBinding.StringFormat = "{0} {1}";
Чтобы вставить пространство между двумя значениями связывания, но он просто кажется пустым при связании с этикеткой «Приветствия».
Binding b = GetBinding("HelloWorld");
Binding b2 = GetBinding("Name");
MultiBinding multib = new MultiBinding();
multib.StringFormat = "{0} {1}";
multib.Bindings.Add(b);
multib.Bindings.Add(b2);
Greetings.SetBinding(Label.ContentProperty, multib);
И вот функция GetBinding (), которая захватывает привязку на основе значения пути:
public Binding GetBinding(string name)
{
Binding binding = new Binding();
binding.Source = mySource;
binding.Path = new PropertyPath(name);
return binding;
}
Кроме того, я должен отметить, что я использую .NET 4., похоже, не работает в XAML. Я также попробовал это в .NET 3.5 после того, как он не работал в 4.0. Обе детские привязки работают ... Если я поставлю преобразователь, значения отображаются. Я бы лучше использовал свойство StringFormat, хотя.
Решение
Это проблема с этикеткой. StringFormat на TextBlock кажется, работает ...