UWP在运行时更改CalendarDatePicker语言

时间:2016-11-18 13:01:26

标签: uwp uwp-xaml calendarview

我有一个在运行时更改UI的应用程序。这是我改变语言的代码:

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方法 - 没用。有关如何实现正常语言变化的任何建议吗?

修改

感谢Elvis Xia,我们注意到代码中的语言更改时,CalendarView的大小被搞砸了,因为如果我这样做:

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

我会看到日期(搞砸了,但仍然):

enter image description here

有任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

所以,作为一个肮脏而讨厌的修复,我在XAML中设置了CalendarView项目的高度和宽度。在CalendarDatePicker控件模板中。

宽度应小于高度约100px - 一切正常;

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

但这仍然不是解决方案