如何本地化DatePicker?

时间:2012-03-28 13:02:37

标签: wpf localization datepicker

在小型Wpf应用程序中,使用绑定到DateTime属性的DatePicker。 当用户的区域和语言设置以及数字和日期格式为德语时,日期将以德语显示,日历将显示德语月份名称。 现在我想用美式英语。在MainWindow的c'tor中,我在InitializeComponent()之前添加了(在InitializeComponent()之后执行此操作时的情况相同):

string uiLanguage = ConfigurationManager.AppSettings["UILanguage"]; //"en-US"
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(uiLanguage);
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(uiLanguage)));

虽然它适用于文本框,但它对DatePicker没有影响。 然后我很傻,创建了一个新用户“约翰英语”,以“约翰英语”登录,将他的显示语言设置为英语,日期和数字格式设置为美国英语。现在,DatePicker始终以美国 - 英语格式显示日期,日历显示英文月份名称,即使我将程序的语言设置为德语。 怎么解决这个问题?可以解决吗?

2 个答案:

答案 0 :(得分:6)

在App.xaml的代码隐藏中添加以下代码:

public App()
{
    EventManager.RegisterClassHandler(typeof(DatePicker), DatePicker.LoadedEvent, new RoutedEventHandler(DatePicker_Loaded));
}

void DatePicker_Loaded(object sender, RoutedEventArgs e)
{
    var dp = sender as DatePicker;
    if (dp == null) return;

    var tb = GetChildOfType<DatePickerTextBox>(dp);
    if (tb == null) return;

    var wm = tb.Template.FindName("PART_Watermark", tb) as ContentControl;
    if (wm == null) return;

    wm.Content = "[Put your text here]";
}

[Ontopic;)] 尝试同时设置CurrentCulture和CurrentUICulture。

//Set default culture to Nl
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
GetChildOfType的

ref

答案 1 :(得分:0)

在XAML中创建一个没有任何绑定的普通DataGridTextColumn:

<DataGridTextColumn x:Name="SomeDateDataGridColumn" Width="Auto" Header="Header"/> 

然后在后面的代码中设置binding和stringformat:

SomeDateDataGridColumn.Binding = new Binding("Property") { StringFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern };