Я никогда не использовал упомянутые вами элементы управления, и я не знаю причину, по которой вы должны установить CultureInfo во время выполнения для указанных элементов управления. Поэтому мой ответ основан на вашем вопросе, как установить CultureInfo во время выполнения. Если это не то, что вы хотели, просто игнорируйте мой ответ.
Если бы мы программировали настольное приложение, CultureInfo можно было бы изменить с помощью:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US")
'en-US = American English
К сожалению, это невозможно в CF.NET.
На самом деле, насколько мне известно, не существует официального или поддерживаемого способа изменить CultureInfo (и региональные настройки) устройства в CF.NET во время выполнения. Можно, возможно, изменить региональные настройки в реестре, но это будет означать, что устройство необходимо перезагрузить.
В моей кодовой библиотеке, однако, есть фрагмент кода, который я нашел некоторое время назад и который я тестировал только в эмуляторе, где он прекрасно работал. Это считается "взломом" и может быть рискованным , но, тестируя его в эмуляторе, я никогда не сталкивался с какими-либо проблемами. Вот это в VB.Net:
'I declare the following statement
Dim myCIintl As New Globalization.CultureInfo("en-US") 'where en-US is for Ame-English
'Then I call the following sub
SetDefaultLocale(myCIintl)
'Here is the code of the sub
Public Shared Sub SetDefaultLocale(ByVal locale As System.Globalization.CultureInfo)
If Nothing Is locale Then
Throw New ArgumentNullException("locale")
End If
Dim fi As System.Reflection.FieldInfo = GetType(System.Globalization.CultureInfo).GetField _
("m_userDefaultCulture", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Static)
If Nothing Is fi Then
Throw New NotSupportedException("Setting locale is not supported in this version of the framework.")
End If
fi.SetValue(Nothing, locale)
End Sub
Примечание: обратите внимание на тот факт, что если приватная переменная m_userDefaultCulture изменит свое имя в будущей версии, то приведенный выше код может сломаться. Также имя переменной может иметь другое имя в локализованной версии Windows Mobile - возможно, в испанской версии это называется другим. Я не знаю, поэтому я думаю, что вы должны попробовать это сами.
Помимо вышеупомянутого примечания, вышеуказанный код должен работать (скрестив пальцы), если на устройстве присутствуют региональные настройки, которые вы хотите использовать. Чтобы увидеть, какие региональные настройки поддерживаются устройством, вы можете использовать отличный код, который Ctacke показал здесь .
Удачи!