2016-11-18 3 views
0

Ich habe eine Anwendung, die Benutzeroberfläche in der Laufzeit ändert. Hier ist mein Code zum Ändern Sprache:UWP Change CalendarDatePicker Sprache in der Laufzeitumgebung

public void SwitchLanguage(SupportedLanguage language) 
{ 
    // Check if passed argument is different from current language 
    if (CurrentLanguage != language.Type) 
    { 
     // Set the new current language 
     CurrentLanguage = language.Type; 

     // Override tha application primary language (it will automatically save the language preference) 
     Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = language.FourDigitCode; 
     ResourceContext.GetForViewIndependentUse().Reset(); 
     ResourceContext.GetForCurrentView(); 

     this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("LocalizedResourceMap")); 
     // Notify code about the changes 
     this.LanguageChanged?.Invoke(this, new EventArgs()); 
    } 
} 

Alle Lokalisierung funktioniert gut, außer CalendarDatePicker - es ist Flyout nicht (in Laufzeit, wenn ich die App Relaunch - wenn über fein) lokalisiert erhalten.

Hier sind die Beispiele

eine Seite und ausgewählte CalendarDatePicker Geöffnet:

enter image description here

die Sprache Russisch Switched:

enter image description here

Ich habe versucht, dies zu tun:

// Attach to LanguageChanged event - created in my own code 
// And trigger this method inside CalendarDatePicker: 
private void LanguageChanged(object sender, EventArgs e) 
{ 
    this.Language = "ru-RU"; // Hardcoded value for test only 
} 

Und das Ergebnis ist folgende:

enter image description here

Ich habe auch versucht() alles zu entkräften. Auch versucht, TemplateChild CalendarView Update-Methode auszulösen - keine Verwendung. Irgendwelche Vorschläge, wie man normale Sprachänderung erreicht?

EDIT:

Dank Elvis Xia, wurde festgestellt, dass auf Sprachwechsel in Code, wird die Calendar Größe geschraubt, denn wenn ich dies tun:

this.calendar.Language = "ru-RU" 
this.calendar.Height = 500; 
this.calendar.Width = 500; 

Ich werde erhalten zu sehen, um die Daten (geschraubt, aber immer noch):

enter image description here

Irgendwelche Ideen, wie Sie das beheben können?

+0

Ab dem zweiten Bild, meinen Sie die Sprache geändert hat, aber es ist etwas falsch mit der Größe des Kalenders Flyout? –

+0

@ ElvisXia-MSFT Ich kann nicht wirklich sagen, dass es ein Größenproblem ist. Es scheint, als wäre Dates nicht gerendert worden - oder vielleicht hast du recht, und die Größe ist kaputt gegangen. Aber warum, wenn ich nur die Sprache geändert habe, nicht den Wochentag - die Daten sollten gleich bleiben (in der Theorie) – Cheese

+0

@ ElvisXia-MSFT, Sie hatten Recht, etwas Seltsames passiert mit Flyout-Größe – Cheese

Antwort

0

Also, als eine schmutzige und fiese Lösung, habe ich die CalendarView Artikel Höhe und Breite in XAML gesetzt. In der CalendarDatePicker-Steuerelementvorlage.

Breite sollte kleiner als Höhe bei etwa 100px sein - das alles funktioniert gut;

<CalendarView Height="400" Width="300" x:Name="CalendarView" ... /> 

Aber noch ist dies keine Lösung

Verwandte Themen