【问题标题】:How to change windows phone APP language during runtime?如何在运行时更改 windows phone APP 语言?
【发布时间】:2011-08-04 09:11:11
【问题描述】:

我按照这个例子构建了一个多语言应用程序:How to: Build a Localized Application for Windows Phone

我成功地将资源数据绑定到这样的文本:

<TextBlock x:Name="ApplicationTitle" Text="{Binding Path=MultiLangResources.Mainpage_Welcome, Source={StaticResource MultiLang}}"/>

我尝试更改Thread.CurrentThread.CurrentUICulture,我可以用代码输出正确的密钥:

ApplicationTitle.Text = LangResource.Mainpage_Welcome;

但是,绑定的文本永远不会更新。

如何让绑定的文本像普通绑定一样更新?

有没有人可以帮我解决这个问题? 我也试过这个,但没有运气。

public class MultiLang : INotifyPropertyChanged
{
    public MultiLang()
    {
    }

    private static MLTest.LangResource multiLangResources = new GigapodV2.LangResource();

    public MLTest.LangResource MultiLangResources
    {
        get { return multiLangResources; }
        set
        {
            if (value != multiLangResources)
            {
                multiLangResources = value;
                NotifyPropertyChanged("MultiLangResources");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged(string property)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }
}

【问题讨论】:

    标签: xaml data-binding windows-phone-7 multilingual


    【解决方案1】:

    很容易做到:

    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("ca-ES");
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ca-ES");
    

    主要问题是所有页面上的文本已经加载(例如主页,如果你把语言选择在那里),需要“手动刷新”。

    但这可以通过编程轻松完成:

    this.btnChangeLanguage.Content = AppResources.Txt_Aceptar;
    

    【讨论】:

      【解决方案2】:

      LangResource 类本身是不可观察的,因此它的任何绑定属性都不会被观察到。而且,手机不会因为您即时更改它而通知与 CurrentCulture 相关的所有属性。

      以这种方式更改语言需要重新启动您的应用程序。但我建议您对此要小心,因为操作系统本身允许语言交换,这意味着您需要有一个真正充分的理由让您的应用程序本身允许它。

      解决方案是创建一个包装类,当您更改 CurrentCulture 时,它​​会通知所有属性它们已更新。使用 Simon 的 NotifyPropertyWeaver 的 [DependsOn] 属性可能会使这变得非常容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-02
        相关资源
        最近更新 更多