设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 服务器 > 系统 > 正文

xaml – 如何在运行时更改Windows Phone APP语言?

发布时间:2021-02-04 09:46 所属栏目:52 来源:网络整理
导读:我按照这个例子来构建一个多语言应用程序: How to: Build a Localized Application for Windows Phone. 我成功地将资源数据绑定到这样的文本: TextBlock x:Name="ApplicationTitle" Text="{Binding Path=MultiLangResources.Mainpage_Welcome,Source={Stat

我按照这个例子来构建一个多语言应用程序: 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));
        }
    }
}

解决方法

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

否则,以这种方式进行语言更改将需要重新启动您的应用.但我会建议你小心这一点,因为操作系统本身允许语言交换,这意味着你需要有一个非常好的理由让你的应用程序允许它本身.

解决方案是创建一个包装类,在更改CurrentCulture时通知所有属性它们已更新.使用Simon的NotifyPropertyWeaver [DependsOn]属性可能会让这很容易.

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读