2016-11-18 6 views
0

У меня есть приложение, которое изменяет интерфейс во время выполнения. Вот мой код для изменения языка:Изменение UWW CalendarDatePicker language во время выполнения

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()); 
    } 
} 

Все локализации работает отлично, за исключением CalendarDatePicker - это Flyout не получает локализованы (во время выполнения, когда я повторно запустить приложение - все, если хорошо).

Вот примеры

Открытые страницы и отдельные CalendarDatePicker:

enter image description here

переключил язык на русский язык:

enter image description here

Я пытался сделать это:

// 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 
} 

И результат:

enter image description here

Я также попытался аннулировать() все. Также попытался вызвать метод TemplateChild CalendarView Update - бесполезно. Любые предложения о том, как добиться нормального изменения языка?

EDIT:

Благодаря Элвис Ся, были замечены, что на изменение языка в коде, размер CalendarView получает ввинчивается, потому что, если я это сделать:

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

я доберусь чтобы увидеть даты (с резьбой, но все же):

enter image description here

Любые идеи, как это исправить?

+0

Со второго изображения, вы имеете в виду язык изменился, но есть что-то не так с размером календарного выпадающей? –

+0

@ ElvisXia-MSFT Я не могу сказать, что это проблема размера. Похоже, что дата не была оказана - или, может быть, вы правы, и размер сломался. Но почему, если я изменил только язык, а не день недели - даты должны оставаться неизменными (теоретически) – Cheese

+0

@ ElvisXia-MSFT, вы были правы, что-то странное происходит с размером вылета – Cheese

ответ

0

Итак, как грязное и неприятное исправление, я установил высоту и ширину элемента CalendarView в XAML. Внутри шаблона управления CalendarDatePicker.

Ширина должна быть меньше высоты около 100 пикселей - все работает нормально;

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

Но все-таки это не решение