Windows Store App 全球化:运行时响应语言变更
在应用程序运行过程中,系统的语言、像素、对比度等系统设置可能会发生改变,应用程序应根据系统环境的改变及时做出适当的响应。为了解决这样的问题,可以在应用程序中为系统状态更改事件注册事件处理方法,当语言、像素等系统设置信息发生改变时将触发这个事件,并在事件处理方法中根据环境变化做出相应的调整。下面通过一个具体的示例来演示如何在应用程序中注册状态更改事件,并在所添加的事件处理方法中对语言首选项的更改做出响应。
新建一个Windows应用商店的空白应用程序项目,并命名为RuntimeChanges。在项目中添加如18.2.3小节示例中相同的语言文件夹、资源文件以及资源。
接下来在MainPage.xaml文件的Grid元素中添加一个“显示信息”按钮和两个TextBlock文本块,按钮用来获取资源的值并将其显示在其中一个TextBlock文本块中,另一个文本块则用来显示提示信息,代码如下所示:
<Button Name="ShowMessage" Content="显示信息" Margin="104,365,0,353" FontSize="20" Click="ShowMessage_Click" Height="50" Width="126"/>
<TextBlock HorizontalAlignment="Left" Margin="287,375,0,0" Name="GetResource" FontSize="25" TextWrapping="Wrap" VerticalAlignment="Top" Height="34" Width="161"/>
<TextBlock HorizontalAlignment="Left" Margin="104,334,0,0" TextWrapping="Wrap" Text="单击按钮显示信息" FontSize="20" VerticalAlignment="Top" Height="26" Width="362"/>
接下来在MainPage.xaml.cs文件中为“显示信息”按钮实现单击事件处理方法ShowMessage_Click,代码如下所示:
using Windows.ApplicationModel.Resources.Core;
private void ShowMessage_Click(object sender, RoutedEventArgs e)
{
//将StringResource资源的值赋给GetResource文本块的Text属性
GetResource.Text = ResourceManager.Current.MainResourceMap.GetValue("Resources/StringResource").ValueAsString;
//为状态更改事件注册处理方法
ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += QualifierValues_MapChanged;
}
在ShowMessage_Click方法中,使用了ResourceManager类的Current成员中的MainResourcesMap成员所提供的GetValue方法,将资源路径Resources/StringResource作为此方法的参数,把返回的资源值通过ValueAsString属性转化成字符串赋值给GetResource文本块的Text属性,使资源值显示在GetResource文本块中。
ResourceManager类在资源的枚举和检查方面比ResourceLoader类拥有更高级的访问权限,ResourceManager类不仅支持访问应用的字符串资源,还能够枚举和检查各种文件资源,使用ResourceManager类需要引用Windows.ApplicationModel.Resources.Core命名空间。
接着在代码中为ResourceManager.Current.DefaultContext.QualifierValues.MapChanged状态更改事件注册事件处理方法QualifierValues_MapChanged,这样就可以在语言首选项更改时触发此事件,并根据更改信息做出响应。
下面来看一下QualifierValues_MapChanged事件处理方法的代码实现。
async private void QualifierValues_MapChanged(IObservableMap<string, string> sender, IMapChangedEventArgs<string> @event)
{
//使用Dispatcher的RunAsync方法将更改后的语言配置资源值显示到界面中
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
GetResource.Text = ResourceManager.Current.MainResourceMap.GetValue("Resources/StringResource").ValueAsString;
});
}
在上面的方法中,为了避免占用UI线程造成混乱,使用了调度器Dispatcher的RunAsync方法将更改后的语言配置资源值显示到界面当中。
运行程序查看效果,当语言首选项为中文(简体)时,单击“显示信息”按钮,会显示中文信息的“你好世界”,效果如图18-20所示。此时若改变语言首选项为英语,显示的信息会立刻变为英语的“Hello World”,效果如图18-21所示。
图18-20 语言首选项为中文(简体)时效果
图18-21 语言首选项为英语时效果
使用本示例所提到的方法,可以在应用运行过程中,对语言首选项的变更作出响应,在前几个小节中,都是通过重启应用程序,对语言首选项的更改作出响应,这是本小节与之前所讲到的示例相比的一个明显差别。下一小节将介绍如何在应用程序中设置语言选项。
Windows Store App 全球化:运行时响应语言变更的更多相关文章
- Windows Store App 全球化:在XAML元素中引用字符串资源
在应用程序中可以通过XAML元素和后台代码两种方式引用资源文件中的字符串资源.本小节先讲述如何在XAML元素中引用字符串资源的相关知识点. 在XAML元素中可以通过使用x:Uid属性来引用资源文件中的 ...
- Windows Store App 全球化:应用中设置语言选项
当开发者将开发的应用上传到Windows应用商店以后,使用Windows 8系统的用户可能会看到并下载这些应用,而这些用户所在的区域或者所使用的语言可能都不相同,如果他们在使用应用程序时希望改变应用显 ...
- Windows Store App 全球化 设置指定页面的语言
上一小节介绍了通过在应用程序中添加语言设置选项来改变整个应用显示信息的语言,而有时用户只想对应用中某一页面信息的语言进行调整,这时就不能使用上一小节所讲述的知识来对应用进行设置.下面将通过一个示例介绍 ...
- Windows Store App 全球化 资源匹配规则
上面几个小节通过示例介绍了如何引用资源以及设置应用语言来显示不同语言的信息,这些示例都只是添加了简体中文和英语两种语言来显示资源,而在一些复杂的应用程序中,字符串资源可能会被定义成多种语言,文件资源也 ...
- Windows Store App 全球化:引用类库资源
前面几个小节介绍了如何引用自身项目的资源,而有时在应用程序开发过程中可能需要访问其他项目中的资源.例如,当几个人或十几个人一起设计一个解决方案时,每个人的工作都是不同的,编写的项目也是不同的,但是每个 ...
- Windows Store App 全球化:引用分离资源文件中的资源
大部分应用程序仅需要单个默认资源文件,例如Strings/zh-CN/Resources.resw,但是在某些应用程序中,最好将资源分离到多个资源文件中,以便更好地组织资源内容,这样就需要考虑如何引用 ...
- Windows Store App 全球化:在后台代码中引用字符串资源
上文提到了引用字符串资源具有两种方式,分别是在XAML元素中和在后台代码中引用资源文件中的字符串资源.在第一小节已经介绍了如何在XAML元素中引用字符串资源,本小节将讲解在后台代码中引用字符串资源的相 ...
- Windows Store App 全球化:在XAML元素中引用文件资源
上一小节讲解了如何在XAML元素中使用x:Uid属性引用资源文件中的字符串资源,通过改变语言首选项显示不同的运行结果.如果把字符串资源变成文件资源,就不能使用x:Uid属性来引用这些文件资源.本小节将 ...
- Windows store app[Part 3]:认识WinRT的异步机制
WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...
随机推荐
- Web App适配不同屏幕的几点建议
安卓设备在屏幕尺寸和像素密度上差别很大,因此在使用WebView加载网页时就需要考虑到这种差别,对我们的网页做出精心的设计以在不同的屏幕上都能得到合适的展现.通常情况下,我们需要考虑到两个因素:1.视 ...
- 概率论与数理统计讲课PPT和往年期末试卷
讲课PPT 第17课:数理统计的基本概念 注 : 我会陆续把讲课PPT放上去,大家可以下载. 往年试卷及解答 往年期末试卷及解答 注 : 供同学们参考以备考.
- 学习ceph官网的ceph块设备命令(一)
一)存储池命令 1.列出存储池 #ceph osd lspools #ceph osd pool ls 2.创建存储池 # ceph osd pool create yhcpool 512 pool ...
- awk 高级技巧
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a ...
- javascript 字符串多行的写法
多行写法! $('#' +xx ).append ( '<div id="' + file.id + '" class="">\ <div c ...
- 历尽磨难之PL/SQL链接Oracle数据库
说起来都是泪啊,上司布置的任务需要远程连接Oracle数据库,说实话这又是我人生中的第一次.我听到以后觉得不是什么大问题,然而我错了..错的很厉害! 我搞了一天一夜才弄好,这里面原因有很多,大体来讲还 ...
- jquery.dataTables--插件使用方法
本文共四部分:官网 | 基本使用|遇到的问题|属性表 一:官方网站:[http://www.datatables.net/] 二:基本使用:[http://www.guoxk.com/node/jqu ...
- 【转】关于 mate viewport属性的具体说明!
什么是Viewport 手机浏览器是把页面放在一个虚拟的"窗口"(viewport)中,通常这个虚拟的"窗口"(viewport)比屏幕宽,这样就不用把每个网页 ...
- 代码性能优化——task
var t1 = Task.Factory.StartNew(delegate { //代码(查接口.数据库) }); 缺点: 不能使用request( HttpContext.Current.Req ...
- SignalR
https://msdn.microsoft.com/zh-cn/magazine/dn802609.aspx http://www.asp.net/signalr/overview/getting- ...