StringFormat 'c' всегда отображается как валюта США? - PullRequest
2 голосов
/ 19 января 2011

Формат строки валюты 'c' создает текст в формате en-US, несмотря на то, что для моего ПК задан другой язык. Я делаю что-то не так или это намеченное поведение?

Phil

Ответы [ 3 ]

3 голосов
/ 21 января 2011

Итак, согласно Microsoft , такое поведение предусмотрено. Вы можете привыкнуть к String.Format, используя настройки культуры ПК, на котором работает ваше приложение, но привязка в WPF не предназначена для такой работы:

Преобразователи привязки никогда не используют CurrentCulture - это сделано специально, так что их поведение предсказуемо для всех машин и региональных настроек.

Однако вы можете указать культуру, которую должен использовать конвертер. Есть два способа сделать это:

  1. Установить Binding.ConverterCulture. Например. <TextBox Text="{Binding Birthday, ConverterCulture=de-DE}"/>
  2. Установите свойство xml: lang (или, что эквивалентно, Language) целевого элемента. Например. <TextBox xml:lang="de-DE" Text="{Binding Birthday}"/>

Кажется, вам нужно заранее знать все различные культуры, в которых будет работать ваше приложение. Что, кажется, немного дерьмо для всех, у кого есть пользователи за пределами Америки.

3 голосов
/ 21 января 2011

Сделайте это в Application.Startup:

FrameworkElement.LanguageProperty.OverrideMetadata(
    typeof(FrameworkElement),
    new FrameworkPropertyMetadata(
        XmlLanguage.GetLanguage(
            CultureInfo.CurrentCulture.IetfLanguageTag)));

больше информации: http://serialseb.blogspot.com/2007/04/wpf-tips-1-have-all-your-dates-times.html

1 голос
/ 19 января 2011

Если я не ошибаюсь, это зависит от настроек культуры в рабочем потоке.

System.Threading.Thread.CurrentThread.CurrentUICulture

или

System.Threading.Thread.CurrentThread.CurrentCulture

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...