Accueil

Binding DateTime StringFormat en français

by Jean-Camille Mercier 7. mai 2013 08:18

Pour afficher une date en WPF, on utilise le StringFormat sur le Binding de cette manière :

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

Et biensur en se basant sur les format de date et heure standards : MSDN

Seulement avec cette manière la date s'affiche au format américain, c'est à dire MM/JJ/AAAA alors que pour nous autres français, la date doit être formaté en JJ/MM/AAAA

On voit beaucoup de chose sur le net pour résoudre le problème : mettre directement JJ/MM/AAA ... des StringFormatConverter, des ConverterCulture, des XmlLanguage.GetLanguage, des CultureInfo.CurrentCulture mais finalement ce qui fonctionne vraiment est tout simple : 

<Application x:Class="WpfApplication1.App"
             ...
             Startup="Application_Startup">

plus

private void ApplicationStartup(object sender, StartupEventArgs e)
{
   string culture = CultureInfo.CurrentCulture.IetfLanguageTag;
   XmlLanguage language = XmlLanguage.GetLanguage(culture);
   // Override de toute les propriétés "Language"
   FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(language));
   TextElement.LanguageProperty.OverrideMetadata(typeof(TextElement), new FrameworkPropertyMetadata(language));   
}

La première ligne permet de positionner la langue sur tout ce qui est TextBlock ou TextBox, la seconde ligne permet d'avoir le même comportement sur les RUN qui eu ne sont pas des FrameworkElement mais des TextElement : MSDN

<TextBlock Foreground="Blue">
  <Run Text="{Binding Nom}"/>
  <Run Text=" - " Foreground="Red" />
  <Run Text="{Binding Prenom}" />
  <Run Text=" - " Foreground="Red" />
  <Run Text="{Binding DateNaissance, StringFormat={}{0:d}}" /> 
</TextBlock>

Voilà, toute les dates sont maintenant en français.