Ich habe eine Business-Anwendung (aus Vorlage erstellt), und ich kann die Sprache dynamisch ändern, indem ResourceWrapper INotifyPropertyChanged machen und dann in Code hinzufügen:Lokalisierung in Silverlight 4 mit 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();
}
das funktioniert gut auf Ressourcen referenziert/binded in xAML-Dateien (zB Mainpage Rahmen), aber es nicht Update Referenzen von etwas habe ich in Code deklariert dh
InfoLabel.Content = ApplicationStrings.SomeString
im Moment bin ich mit ResourceWrapper nicht. Meine Frage hier ist, wie kann ich meinen Code ändern, so dass es verwendet und aktualisiert wird, wenn ResourceWrapper ändern. Ich habe versucht:
InfoLabel.Content = ((ResourceWrapper)App.Current.Resources["ResourceWrapper"])
.ApplicationStrings.SomeString
aber es funktioniert nicht.
Irgendwelche Ideen?
Das scheint eine Menge Arbeit für so eine einfache Sache zu sein. Wenn ich es für jede Zeichenfolge tun müsste, die ich im Code binden möchte, würde ich wahrscheinlich NavigationService.Refresh() verwenden, aber das ist nicht optisch elegant ... – Artur
Sie haben Recht, es ist eine Menge Code. Deshalb sollten Sie es am besten vermeiden und Ihre Bindungen direkt im XAML deklarieren. Gibt es einen Grund, warum Sie den Text des Contentcontrols im Code einstellen müssen? –
Ich habe eine Hilfsmethode hinzugefügt, die die Menge an Code auf eine Zeile reduziert. –