tengo una aplicación de negocios (creado a partir de la plantilla) y puedo cambiar el idioma de forma dinámica al hacer ResourceWrapper INotifyPropertyChanged y luego añadir en el código:Localización en Silverlight 4 usando ResourceWrapper
private void Language_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Thread.CurrentThread.CurrentCulture =
new CultureInfo(((ComboBoxItem)((ComboBox)sender).SelectedItem).Tag.ToString());
Thread.CurrentThread.CurrentUICulture =
new CultureInfo(((ComboBoxItem)((ComboBox)sender).SelectedItem).Tag.ToString());
((ResourceWrapper)App.Current.Resources["ResourceWrapper"]).ApplicationStrings =
new ApplicationStrings();
}
esto funciona bien en los recursos referenciados/binded en archivos XAML (es decir, el marco MainPage), pero no actualizar las referencias de todo lo que he declarado en el código es decir
InfoLabel.Content = ApplicationStrings.SomeString
por el momento no estoy usando ResourceWrapper. Mi pregunta aquí es cómo puedo cambiar mi código para que lo use y actualice cuando cambie ResourceWrapper. Intenté:
InfoLabel.Content = ((ResourceWrapper)App.Current.Resources["ResourceWrapper"])
.ApplicationStrings.SomeString
pero no funciona.
¿Alguna idea?
Eso parece ser una gran cantidad de trabajo para algo tan simple. Si tuviera que hacerlo por cada cadena que quiera enlazar en código, probablemente usaría NavigationService.Refresh(), pero esto no es visualmente elegante ... – Artur
Tienes razón, es un montón de código. Por eso es mejor evitarlo y declarar sus enlaces directamente en el XAML. ¿Hay alguna razón por la que deba establecer el texto del control de contenido en el código? –
Agregué un método auxiliar que reduce la cantidad de código a una línea. –