2012-03-28 83 views
3

在一个小的Wpf应用程序中,使用绑定到DateTime属性的DatePicker。 当用户的区域和语言设置以及数字和日期格式为德语时,日期显示为德语,日历显示德语月份名称。 现在我想用美英来获得它。在主窗口的c'tor(我这样说的时候同样的情况,经过的InitializeComponent())的InitializeComponent()之前加入:如何本地化DatePicker?

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

虽然与文本框的作品,它与的DatePicker没有影响。 然后,我变得脸红,并创建了一个新用户“John English”,以“John English”的身份登录,将他的显示语言设置为英语,日期和数字格式设置为US-English。现在,DatePicker总是以美英文格式显示日期,日历显示英文月份名称,即使将我的程序语言设置为德语时也是如此。 这怎么解决?它可以根本解决吗?

回答

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"); 

ref为GetChildOfType

+0

谢谢为提示。但那不是重点:我根本没有兴趣用我自己的本地化文本取代“选择日期”。 zh-CN和de-DE之间的日期格式不同。当我在德国的Windows上将我的应用程序的语言设置为en-US时,我希望看到美式格式的日期。 – 2012-03-28 13:26:20

+0

编辑我的回答 – 2012-03-28 13:53:22

+0

谢谢。设定CurrentCulture,不仅CurrentUICulture,做的伎俩。 – 2012-03-28 14:15:45

0

创建一个没有在XAML任何绑定正常DataGridTextColumn:

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

然后设置在后面的代码绑定和的StringFormat:

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