12、uwp 开发的零碎总结
1、在给 win10 uwp 打包时,第4位 “修正版本号”(Major.Minor.Build.Revision)不能修改。
在用 vs 打商店包时,修正版本号默认为 0,并且编辑框不能编辑,我在工程的清单文件中把它改为 1后,

2、在 win10 上,x:Bind 没有 ElementName属性, 可以使用 Path 指定元素的名称, 因为当前的
xaml 的 DataContext 默认为 codebehind 页面:
3、在 wp8.1 store 时,在页面切换时拦截手机上的 back 按钮,需要注册到手机的 Hardware 键上,如:
虽然这种方式仍然在 win10 Mobile 上支持,不过在其他 win10 设备上不支持。可以使用全局 back 键,如 win10窗口左上角:
在 win10 的 UWP 中, 键盘上的 Backspace (或者配合 alter | 空格) 为 后退键:
.
4、关于分辨率适配的理解。因为设计的同事肯定不如 uwp开发者对于 win10中对于缩放机制了解更多。最开始
让设计的同事设计 UI 时,大概总结了一下:
设计师的同学, 可以不用考虑屏幕的物理分辨率,只要考虑视图分辨率就行了(在做响应式布局的时候 ,基本只需要考虑屏幕的
宽度,忽略屏幕的高度)。比如上面的两个 phone 的参数,都是 1080p的,那么 phone 上的 app 在运行时,则使用的是视图
分辨率 (物理分辨率 / 缩放比, 比如 上面 1080/2.5 = 432px 宽, 1080/3 = 360px 宽),对于图片资源,只需要给我们最
高清的就好了 (比如针对360px 视图宽度的一个背景,则需要是 1080px 宽的图片,这样在高清屏上才会显示得清晰度很高。具
体针对这个清晰度图片的压缩,就交给我们写代码的同学就好了,编码的同学,根据 runtime 的缩放系统,再提供不同尺寸的资源,
比如同一张图片: logo.scale-300.png 和 logo.scale-250.png,当app 从商店下载时,win商店会根据用户的设备,下载需要的
图片。这些是runtime 的缩放系统关心的事情。)
一般情况下 win10 设备屏幕的缩放比 : phone > 平板 > 桌面。phone 大约为 200% - 500%, PC、pad 大约为 90%-250% 。
意思就是,win 10 上针对 app 的响应式布局大概为 3段, “320px ~ 450 px” 为 phone 的, “451px ~ 1024px” 为 pad 的,
“1024px -> 正无穷 ” 为 pc 的 (或者 PC 的就 1920px 以上的。因为目前还没有较为通用的标准,后面可以再微调)。而真正给我们
的图片资源,只需要最高分辨率的就好了,编码的同学会再根据需要生成不同尺寸的图片资源。
5、在创建多窗口视图时,在 win10 uwp上,与 win8.1 不同,需要调用 Window.Activate() 方法
,窗口才会显示:
ApplicationView MainAppView;
async void Show_Multi_View(_A _a)
{
MainAppView = ApplicationView.GetForCurrentView();
var MainDispatcher = Window.Current.Dispatcher;
if (_a == null) return;
CoreApplicationView view = CoreApplication.CreateNewView();
await view.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
var f = new Windows.UI.Xaml.Controls.Frame();
f.Navigate(typeof(PlayPage));
Window.Current.Content = f;
// 主题
f.RequestedTheme = ElementTheme.Light; Window.Current.Closed += (sender, e) => { Debug.WriteLine("Window.Current.Closed"); };
ApplicationView appView = ApplicationView.GetForCurrentView(); appView.Title = "独立窗口视频"; // += AppView_Consolidated;
appView.Consolidated += (sender, e) =>
{
if (f.CanGoBack)
f.GoBack(); Window.Current.Close();
}; //view.CoreWindow.Closed += CoreWindow_Closed;
//view.CoreWindow.Activated += CoreWindow_Activated;
// view.CoreWindow.KeyDown += CoreWindow_KeyDown;
view.CoreWindow.VisibilityChanged += (sender, e) =>
{
Debug.WriteLine("CoreWindow_VisibilityChanged");
}; //Window.Current.Activate();
// ApplicationViewSwitcher.SwitchAsync(appView.Id, MainViewId, ApplicationViewSwitchingOptions.Default); await MainDispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
// 必须在主线程中调用,否则引发 灾难错误
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(appView.Id, ViewSizePreference.UseHalf);
});
});
}
6、在 Frame 对象中,切换页面时,配置导航动画:
参考 SlideNavigationTransitionInfo :
7、获得操作系统版本号:
/// <summary>
/// 获取操作系统版本
/// </summary>
/// <returns>操作系统版本</returns>
private static string GetOsVersion()
{
ulong version = Convert.ToUInt64(AnalyticsInfo.VersionInfo.DeviceFamilyVersion);
return $"{version >> 48 & 0xFFFF}.{version >> 32 & 0xFFFF}.{version >> 16 & 0xFFFF}.{version & 0xFFFF}";
}
8、在做列表控件的分组操作时,当GridView (ListView) 的 ItemsPanel 为默认的ItemsWrapGrid (ItemsStackPanel) 时,
GridView.GroupStyle.Panel 不起作用; 当 ItemsPanel 为其它容器时(StackPanel)则GridView.GroupStyle.Panel 起
作用(其为 VisualTree):
9、如果在使用 Binding 和 x:Bind 进行数据绑定时,如果在运行时引发了异常(比如绑定到 a.name,但 a 为 null,就会
抛 ArgumentNullException ),虽然 app不会 crash,但会造成性能下降明显,特别是绑定的 item 有很多时。
在 vs 的 output 窗口,可以看到有哪些属性在绑定时抛了异常:
10、如果把 ListView 的 ItemsPanelTemplate 改为 StackPanel,则设置ListView.GroupStyle 中的
HeaderContainerStyle 样式不起作用。并且 Group.Header 不会滑动停留:
10、使用 BitmapIcon 控件可以设置图片的前景色
例如,下面的搜索 icon 本身为白色,但可以改变为其它颜色:
<BitmapIcon x:Name="searchIcon" Foreground="Yellow" UriSource="ms-appx:///Assets/Icons/search.png">
11、现在你的 UWP 下载的目标设备,可以通过商店后台,或者在 app 清单文件中进行指定:
MSDN : https://msdn.microsoft.com/zh-cn/library/windows/apps/mt148548.aspx#device
在清单文件中:
这里通过 Windows.Universal、Windows.Mobile、Windows.Destop 三个选项,来设置下载的目标设备。
在商店后台:
在商店的允许下载设备的设置,和清单文件中的设置,两个是无关的,不会通过 vs 关联账户会进行同步。
12、在 visual studio 2015 的 xaml 编辑器中,增加了一个比较赞的功能,就是像 C# 中那样,可以通过 # region 和 #endregion
进行代码块的折叠 :
13、遇到一个奇怪的 bug,在 phone端,如果在 app 的资源字典里声明:
<!-- 覆盖 phone 上 的系统样式 PhoneAccentBrush ,pad 上没有-->
<SolidColorBrush x:Key="PhoneAccentBrush" Color="Red"/>
会在某些 phone上(比如 lumia920、lumia 620)上 app页面顶部出现一根红线。
例如:
补充:如果在 UWP 中,设置:
<SolidColorBrush x:Key="SystemControlHighlightAccentBrush" Color="Red"/>
会使 lumia620顶部和右下侧出现一根横线
14、今天遇到一个诡异的问题,只在 lumia950 上复现了。开始时, app直接 crash,并没有详细的异常提示,然后根据 vs提示,打开捕获所有异常的设置:
在中断面板中,勾选所有 CLR 异常,即在所有引发异常的地方中断代码的执行(即使在 try catch 中引发的异常):
然后捕获了 try catch 中,读取响应报文流的代码,当注释掉该行代码时,app 不会 crash,如果此处 抛出了异常,即使是在 try 中
执行的,依然会引发 app 的 crash:
12、uwp 开发的零碎总结的更多相关文章
- Win10/UWP开发—凭据保险箱PasswordVault
PasswordVault用户凭据保险箱其实并不算是Win10的新功能,早在Windows 8.0时代就已经存在了,本文仅仅是介绍在UWP应用中如何使用凭据保险箱进行安全存储和检索用户凭据. 那么什么 ...
- UWP开发入门(四)——自定义CommandBar
各位好,再次回到UWP开发入门系列,刚回归可能有些不适应,所以今天我们讲个简单的,自定义CommandBar,说通俗点就是自定义类似AppBarButton的东西,然后扔到CommandBar中使用. ...
- [UWP开发]NavigationView基础使用方法
原文:[UWP开发]NavigationView基础使用方法 [UWP开发]NavigationView基础使用方法 NavigationView是秋季创意者更新(16299)引入的新控件,用于生成W ...
- 领域驱动和MVVM应用于UWP开发的一些思考
领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...
- UWP开发必备:常用数据列表控件汇总比较
今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- UWP开发之控件:用WebView做聊天框
目录 说明 WebView存在的价值 使用WebView的几个重要技巧 使用WebView做的聊天框 说明 大家都知道,无论是之前的Winform.WPF还是现在的IOS.Android开发中,都存在 ...
- Win10 UWP 开发系列:使用SQLite
在App开发过程中,肯定需要有一些数据要存储在本地,简单的配置可以序列化后存成文件,比如LocalSettings的方式,或保存在独立存储中.但如果数据多的话,还是需要本地数据库的支持.在UWP开发中 ...
- Win 10 UWP开发系列:设置AppBarButton的图标
在WP8以前,页面最下面的四个小圆按钮是不支持绑定的,WP8.1 RT之后,系统按钮升级成了AppBarButton,并且支持绑定了.在Win10 UWP开发中,按钮的样式发生了变化,外面的圆圈没有了 ...
随机推荐
- sencha touch list(列表)、 store(数据源)、model(模型)详解
//求职 Ext.define('app.model.Staff', { extend: 'Ext.data.Model', config: { fields: [{ name: 'id', type ...
- oracle中Blob和Clob类型的区别
BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的的,或者可以直接用LOB字段代替这两个.但是为了更好的管理ORACLE数据库,通常像图 ...
- C函数tolower,与toupper
tolower 将大写转换成小写. 非字母字符不做出处理. 这个函数用法有点特殊他是处理字符的,而不是处理字符串的. 所谓的不能处理字符串不是说他不能处理字符串,他处理的时候对字符串必须是 ...
- ftp的20 21端口和主动被动模式
ftp只支持tcp连接,不支持udp连接. ftp使用两个端口: 21(控制端口, 命令端口) , 20(数据端口) 21端口: 用来控制用户验证, 连接的建立和关闭:open/close/bye ...
- [转]优化wp_head()
经过对head的优化,我的博客访问速度也快了好多,在此过程中也了解到wp_head()模板函数的作用,可以再次优化,特此记录. 步骤:加入到function.phpremove_action(‘wp_ ...
- tomcat服务器配置及使用
序:tomcat作为免费开源的web服务器,广受大家喜欢,但是该如何使用此服务器呢?下面就一步一步教大家操作tomcat服务器 一.权限配置 编辑tomcat-users.xml文件配置tomcat服 ...
- PHP Document 注释标记及规范 && PHP命名规范
注释标记 @access 使用范围:class,function,var,define,module 该标记用于指明关键字的存取权限:private.public或proteced @author 指 ...
- 搭建DNS服务器
导读 Linux下架设DNS服务器通常是使用Bind程序来实现的.Bind是一款实现DNS服务器的开放源码的软件.DNS即域名系统,主要功能是将人们易于记忆的Domain Name(域名)与不易记忆的 ...
- Mysql函数集合
Mysql提供了很多函数 提供的常用函数集合 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整 ...
- 【转】android中Uri.parse()用法
1,调web浏览器 Uri myBlogUri = Uri.parse("http://xxxxx.com"); returnIt = new Intent(Intent.ACTI ...