I\'m having some trouble with the output of a DateTime value. My computer\'s current culture is set to de-AT (Austria).
The following code
string s1 = Da
you could use a IValueConverter (which takes in a culture parameter) and format the value as you wish, something I like is this nullable converter by Matt Hamilton
class NullableDateTimeConverter : ValidationRule, IValueConverter
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (value == null || value.ToString().Trim().Length == 0) return null;
return new ValidationResult(
ConvertBack(value, typeof(DateTime?), null, cultureInfo) != DependencyProperty.UnsetValue,
"Please enter a valid date, or leave this value blank");
}
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null) return "";
DateTime? dt = value as DateTime?;
if (dt.HasValue)
{
return parameter == null ? dt.Value.ToString() : dt.Value.ToString(parameter.ToString());
}
return "";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || value.ToString().Trim().Length == 0) return null;
string s = value.ToString();
if (s.CompareTo("today") == 0) return DateTime.Today;
if (s.CompareTo("now") == 0) return DateTime.Now;
if (s.CompareTo("yesterday") == 0) return DateTime.Today.AddDays(-1);
if (s.CompareTo("tomorrow") == 0) return DateTime.Today.AddDays(1);
DateTime dt;
if (DateTime.TryParse(value.ToString(), out dt)) return dt;
return DependencyProperty.UnsetValue;
}
#endregion
}
heres the original
Wrote about it some time ago on my blog:
This will tell you how to get WPF to use the right culture:
http://www.nbdtech.com/blog/archive/2009/02/22/wpf-data-binding-cheat-sheet-update-the-internationalization-fix.aspx
This will change the WPF culture on the fly when you modify the settings in the control panel:
http://www.nbdtech.com/blog/archive/2009/03/18/getting-a-wpf-application-to-pick-up-the-correct-regional.aspx
To apply the solution mentioned at http://tinyurl.com/b2jegna do the following:
(1) Add a Startup event handler to the Application class in app.xaml:
<Application x:Class="MyApp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
...
Startup="ApplicationStartup">
(2) Add the handler function:
private void ApplicationStartup(object sender, StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
}
WPF strings should then be formatted correctly according to culture.
Please see my answer on StringFomat Localization problem
If you want one particular language, you can set it on the top level element using xml:lang
.
For example:
<Window xml:lang="de-AT">
...
</Window>
I Know that this is an aging question but this has always worked for me and sharing knowledge is a good thing. Since my apps always change language on the fly, the FrameworkElement.LanguageProperty.OverrideMetadata only works once and its no good for me, so behold:
this.Language = System.Windows.Markup.XmlLanguage.GetLanguage(ActiveLanguage.CultureInfo.IetfLanguageTag);
where (this) is the MainWindow, actually you have to do it in all rootelements (Windows). There you go simple enough.