在以前,为PC和手机做App是两个工程,PC和手机各一个。在Windows 10中会发现只有一个了,对于简单的页面变化可以使用VisualState来解决,但是比如网易云音乐这种PC版和手机版差异巨大使用VisualState也许就力不从心了。如何解决因为UI差异过大所导致的问题?

有两个解决方案

  1.分别为PC和手机创建单独的安装包

  2.在运行时动态加载

UWP版本淘宝选择了第一种方式,其实这样的方式和Win8.1下的通用App是一样的,应该叫做UAP。建议根据实际情况选择对应的解决方案

下面我们就来看一下如何实现运行时动态加载页面。原文

第一种:DeviceFamily-Type folder

首先创建一个空白的工程,在MainPage中添加一下代码

        <TextBlock Foreground="Red" Text="This is desktop." FontSize="72"
                   VerticalAlignment="Center" HorizontalAlignment="Center"/>

然后在工程中添加DeviceFamily-Mobile文件夹,并向其中添加一个名称为MainPage的View

然后添加一下代码:

        <TextBlock Text="Hello Windows Phone"
                   HorizontalAlignment="Center"
                   Foreground="Red"
                   VerticalAlignment="Center" />

运行效果如下:

需要注意的是:DeviceFamily-Type文件夹必须与Page页面在同一层

第二种:.DeviceFamily-Type in file name

第二种其实很简单就是把刚才的文件夹换成了文件

注意:不能同时使用1,2两种方法

第三种:重载InitializeComponent方法

前两种其实都是一种合约,但是第三种非常强大,可以编写自己的逻辑。

首先我们在解决方案资源管理器中将MainPage展开,会发现MainPage类中有两个InitializeComponent方法

点击任意一个InitializeComponent方法

会打开MainPage.g.i.cs这个文件,这个其实是一个XAML设计器生成的文件, 用于代码提示。

从图中可以发现,在构造函数中调用的是第一种重载, <( ̄︶ ̄)>,也就是说我们可以手动调用第二个不就完嘛!

下面给出一段代码:

    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        private bool _isMobile = Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons");

        public MainPage()
        {
            if (!_isMobile)
                this.InitializeComponent();
            else
                this.InitializeComponent(new Uri("ms-appx:///PrimaryMainPage.xaml", UriKind.Absolute));
        }
    }

需要注意的是:请保持MainPage前台页面是空的,否则当前台出现带有x:Name的控件时,XAML设计器生成的代码就会变成了下面这一种。

会发现InitializeComponent(System.Uri resourceLocator)这一种重载没有了!!!,这是XAML设计器的生成规则,所以请保持MainPage页面前台也就是跳转页面前台是干净的,否则很有可能无法通过编译,而且本来MainPage在这种情况下就是没有用的,只不过是为了做一个跳转而已,所以此时只需要为手机,PC或者是Table分辨创建页面然后在运行时判断加载哪一个。至于ViewModel之类的能否共享就看实际的需求和程序的设计了

各位还可以在第三种方法上继续发挥想象力。

以上就是三种运行时动态加载页面的方法。

谢谢啦!

【翻译】Windows 10 中为不同设备加载不同页面的3种方法的更多相关文章

  1. 如何完全禁用或卸载Windows 10中的OneDrive - 51CTO.COM

    OneDrive 是微软的个人云存储平台,提供了对个人用户的文件托管.存储和同步等服务,OneDrive 默认被内置在 Windows 10 操作系统当中,而且当用户使用 微软账户 登录时,OneDr ...

  2. [转载]在 Windows 10 中, 如何卸载和重新安装 OneNote App

    在 Windows 10 中, 如何卸载和重新安装 OneNote App 15/8/2015 使用 PowerShell 命令卸载 OneNote App 开始菜单 -> 输入 "P ...

  3. 在Windows 10中截取截图的6种方式 简介

    在Windows 10中截取截图的6种方式 简介 截图对于不同的目的很重要.它可以用于捕获笔记本电脑上的任何内容的截图.所以,如果你使用Windows 10,你可能不知道如何截图,因为它是比较新的.因 ...

  4. 重装助手教你如何在Windows 10中更改您的帐户名称

    当您设置新的Win10免费下载 PC时,您选择用户名的部分可能会让您措手不及.如果是这种情况,您可以选择弹出头部的第一件事或者您打算稍后更改的随机和临时事物.但令人惊讶的是,在Windows 10中更 ...

  5. 如何在 Windows 10 中搭建 Node.js 环境?

    [编者按]本文作者为 Szabolcs Kurdi,主要通过生动的实例介绍如何在 Windows 10 中搭建 Node.js 环境.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 在本文中 ...

  6. Windows 10 中的存储空间

    存储空间有助于保护你的数据免受驱动器故障的影响,并随着你向电脑添加驱动器而扩展存储.你可以使用存储空间将两个或多个驱动器一起分组到一个存储池中,然后使用该池的容量来创建称为存储空间的虚拟驱动器.这些存 ...

  7. [转]如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...

  8. []如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...

  9. 在 Windows 10 中开启移动 WLAN 热点

    本文将介绍如何在 Windows 10 中开启移动 Wi-Fi 热点. This post is written in multiple languages. Please select yours: ...

随机推荐

  1. Dubbo 分布式服务框架(spring、zookeeper)

    DUBBO DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架, alibaba资源 源码:https://github.com ...

  2. 【hbase】——HBase 写优化之 BulkLoad 实现数据快速入库

    1.为何要 BulkLoad 导入?传统的 HTableOutputFormat 写 HBase 有什么问题? 我们先看下 HBase 的写流程: 通常 MapReduce 在写HBase时使用的是 ...

  3. 继续说一下2016里面的json功能(1)

    首先先来测试数据,数据是使用之前的,就 不要在意这些细节了啊~ 借用上一篇的测试数据 ),Chinese int ,Math int) ,),(,),(,),(,null); 然后我们使用这个表里面生 ...

  4. python基础(三)序列

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢thunder424纠错 sequence 序列 sequence(序列)是一 ...

  5. linux清理内存命令

    1.清理前内存使用情况 free -m 2.开始清理  echo 1 > /proc/sys/vm/drop_caches3.清理后内存使用情况 free -m4.完成! 查看内存条数命令: # ...

  6. linux mount 硬盘挂载和卸载

    Linux 挂载 [root@whp6 ~]# mount /dev/sdb5 /mnt/ [root@whp6 ~]# df -h Filesystem Size Used Avail Use% M ...

  7. 安装rpm包

    下载好一个rpm包怎样安装? [root@localhost ~]# ls anaconda-ks.cfg install.log install.log.syslog jboss-as-7.1.1- ...

  8. easyUI的dateBox控制时间格式

    <input type='text' name='yearQuery' class='easyui-datebox ' data-options="formatter:myformat ...

  9. PAT 1011. A+B和C (15)

    给定区间[-231, 231]内的3个整数A.B和C,请判断A+B是否大于C. 输入格式: 输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测试用例,每组占一行,顺序给出A.B ...

  10. FSL - MELODIC

    Source: http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/MELODIC; https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/MELODI ...