Mittwoch, 15. Mai 2013

WPF Controls mit falscher Culture

Generell werden alle WPF Controls mit der en-US Culture erstellt. Dadurch werden unter Umständen z.B. Zahlen oder Daten im falschen Format angezeigt. Dieses Problem ist bei Microsoft schon lange bekannt und kann mit einem Workaround umgangen werden.

Wird folgende Zeile Code ausgeführt, wird von allen FrameworkElement's die Sprache auf die aktuelle Culture gesetzt.


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

Damit hätte man schon mal alle FrameworkElement's abgedeckt.
Nutzt man nun vielleicht auch FrameworkContentElement's wie z.B. das Run Control so kann man auch explizit für diese die Sprache festlegen:

 FrameworkContentElement.LanguageProperty.OverrideMetadata(typeof(Run), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));  
           
Das Überschreiben dieser Metadaten darf allerdings nur einmal aufgerufen werden, ansonsten wird eine Exception ausgelöst. Am Besten ruft man diese Funktionalitäten in der App.xaml.cs in der OnStartup Methode auf.