@ Оливье: просто сказать «другие пользователи даже не знают о такой опции», «из моих многолетних знаний о WPF и Silverlight, которые я знаю лучше всего» или даже утверждать, что кто-то знает «реальные потребности» людей, заносчиво. Вы ничего не знаете о предпочтениях почти 99% людей этой планеты - так же, как и все остальные разработчики. Примите, что есть необходимость, и предоставьте помощь. Использование YYYY-MM-DD - это формат даты, который я хотел бы, чтобы весь мир скорее согласился, чем использовал свои региональные. ИМХО, «от большого к маленькому» более полезно, особенно когда дело доходит до сортировки, чем любой другой формат.

м случае:

У меня есть привязка TextBlock к свойству типа DateTime. Я хочу, чтобы он отображался в соответствии с региональными настройками пользователя.

<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />

Я устанавливаю свойство языка какПривязки WPF XAML и отображение CurrentCulture говорит:

this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);

Но с этой строкой кода он просто отображает текст как формат по умолчанию CultureInfo с IetfLanguageTag из CurrentCulture, а не как эффективное значение, выбранное в настройках региона системы:

(например, для "де-де"дД.ММ.ГГГГ используется вместо выбранногоYYYY-MM-дд)

Есть ли способ, которым Binding использует правильный формат без определения ConverterCulture для каждого Binding?

В коде

string.Format("{0:d}",Date);

использует правильные настройки культуры.

редактировать:

другой способ, который работает не так, как хотелось бы (например, this.Language = ... делает):

xmlns:glob="clr-namespace:System.Globalization;assembly=mscorlib"

а также

<Binding Source="{x:Static glob:CultureInfo.CurrentCulture}" 
 Path="IetfLanguageTag" 
 ConverterCulture="{x:Static glob:CultureInfo.InvariantCulture}" />

Ответы на вопрос(9)

Ваш ответ на вопрос