我有一个在运行时更改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:
将语言转换为俄语:
我试过这样做:
// 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
}
结果如下:
我也尝试使()无效。还试图触发TemplateChild CalendarView Update方法 - 没用。有关如何实现正常语言变化的任何建议吗?
修改
感谢Elvis Xia,我们注意到代码中的语言更改时,CalendarView的大小被搞砸了,因为如果我这样做:
this.calendar.Language = "ru-RU"
this.calendar.Height = 500;
this.calendar.Width = 500;
我会看到日期(搞砸了,但仍然):
有任何想法如何解决这个问题?
答案 0 :(得分:0)
所以,作为一个肮脏而讨厌的修复,我在XAML中设置了CalendarView项目的高度和宽度。在CalendarDatePicker控件模板中。
宽度应小于高度约100px - 一切正常;
<CalendarView Height="400" Width="300" x:Name="CalendarView" ... />
但这仍然不是解决方案