En realidad, puede establecer la cultura de subprocesos predeterminada y la cultura de la interfaz de usuario, pero solo con Framework 4.5+
Puse en este constructor estático
static MainWindow()
{
CultureInfo culture = CultureInfo
.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
var dtf = culture.DateTimeFormat;
dtf.ShortTimePattern = (string)Microsoft.Win32.Registry.GetValue(
"HKEY_CURRENT_USER\\Control Panel\\International", "sShortTime", "hh:mm tt");
CultureInfo.DefaultThreadCurrentUICulture = culture;
}
y poner un punto de interrupción en el método Convert de un ValueConverter para ver qué llegó al otro extremo. CultureInfo.CurrentUICulture dejó de ser en-US y se convirtió en en-AU completo con mi pequeño truco para que respete la configuración regional de ShortTimePattern.
¡Hurra, todo está bien en el mundo! O no. El parámetro de cultura pasado al método Convert todavía está en EE. UU. Erm, ¿WTF? Pero es un comienzo. Al menos de esta manera
- puedes arreglar la cultura de la interfaz de usuario una vez cuando se carga tu aplicación
- siempre es accesible desde
CultureInfo.CurrentUICulture
string.Format("{0}", DateTime.Now)
utilizará su configuración regional personalizada
Si no puede usar la versión 4.5 del marco, deje de configurar CurrentUICulture como una propiedad estática de CultureInfo y configúrelo como una propiedad estática de una de sus propias clases. Esto no solucionará el comportamiento predeterminado de string.Format o hará que StringFormat funcione correctamente en enlaces, luego recorra el árbol lógico de su aplicación para recrear todos los enlaces en su aplicación y establecer su cultura de conversión.