转载

【Win 10应用开发】如何知道UAP在哪个平台上运行

面向22世纪的现代化应用程序可以同时在多种设备上运行,于是有朋友会有一个疑问:有时候,我们还真的需要判断一下,UAP应用程序在哪个平台上运行。尽管大多情况下我们不必要这样做,但某些特殊情况还得考虑。比如一串数据列表,我希望如果在桌面上运行时就以横向列表展现;但要是运行在手机上就以纵向列表展现。

也就是说,其实我们只需分析两种情况即可:

一、桌面。(台式机、笔记本、平板、游戏机、发广告专用机、导航器……)

二、移动环境。其实就是手机。

那么,有啥办法可判断呢?勿急,老周先告诉你,方法比较简单。咱们先看一段代码:

var context = ResourceContext.GetForCurrentView();             string s = string.Empty;             foreach (var item in context.QualifierValues)             {                 s += item.Key + " : " + item.Value;                 s += "/n";             }             tb.Text = s;

ResourceContext类在Windows.ApplicationModel.Resources.Core命名空间下,就是用于访问与当前应用程序的限定资源的API,也可以把这个“资源”理解为应用程序的一些配置信息,如什么语言的,日语的还中文的;什么主题基调的,浅色还是深色;什么比例的,缩放100%还是180%……

调用ResourceContext.GetForCurrentView()方法可以直接得到ResourceContext实例,再通过QualifierValues属性得到一个字典数据:Key为字符串,Value也是字符串。QualifierValues属性表示该资源的限定符集合。

悟性高的朋友可能已经猜到其中的玄机了,不过猜不到也不用急,现在我们用上面的代码做两件事,做完这两件事你就会明白了。

第一件事,在本地计算机和平板模拟器上运行应用,然后得到如下图的结果:

【Win 10应用开发】如何知道UAP在哪个平台上运行

第二件事,在手机模拟器上运行一下,得到结果如下:

【Win 10应用开发】如何知道UAP在哪个平台上运行

不知道你看懂了没,如果还没有看出其中的奥妙,那老周就揭晓了: 在资源限定符字典中,有一条记录的Key为DeviceFamily,如果在桌面上运行的话,它的Value就是Desktop;如果在手机上运行,Value就是Mobile

怎么样,现在懂了吧?

那么,你猜猜,如果判断UAP正在运行的设备,该想到方法了吧。

老周给出个例子,界面上有个StackPanel容器,里面放了几块正方形的烧饼。如果在桌面上运行,烧饼就横着放;如果在手机上运行,烧饼就竖着放,以方便用户流口水。

XAML代码如下:

<StackPanel Margin="15" Name="panel">             <Rectangle Margin="14" Width="125" Height="125" Fill="Yellow"/>             <Rectangle Margin="14" Width="125" Height="125" Fill="Red"/>             <Rectangle Margin="14" Width="125" Height="125" Fill="Pink"/>             <Rectangle Margin="14" Width="125" Height="125" Fill="Orange"/>         </StackPanel>

处理代码如下:

// 得到资源上下文对象             ResourceContext resContext = ResourceContext.GetForCurrentView();             // 访问键名为DeviceFamily的值             string value = resContext.QualifierValues["DeviceFamily"];             // 分析             if (value == "Desktop")             {                 panel.Orientation = Orientation.Horizontal;             }             else             {                 panel.Orientation = Orientation.Vertical;             }

OK,首先,在本地计算机上运行一下,结果如下:

【Win 10应用开发】如何知道UAP在哪个平台上运行

接着,在手机模拟器上运行,结果如下:

【Win 10应用开发】如何知道UAP在哪个平台上运行

看来这个DeviceFamily确实很Family。

本文例子下载地址:http://files.cnblogs.com/files/tcjiaan/deviceFamilySmp.zip

正文到此结束
Loading...