如何本地化DatePicker?

Ber*_*ler 3 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)));
Run Code Online (Sandbox Code Playgroud)

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

Ral*_*ine 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]";
}
Run Code Online (Sandbox Code Playgroud)

[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");
Run Code Online (Sandbox Code Playgroud)

ref for GetChildOfType