2019独角兽企业重金招聘Python工程师标准>>>

首先我要做的效果如下

思路一:page

在WP里Page是最基本的东西,你第一想法肯定是用Page来做登录注册。但是登录注册其实是不太适合用Page来做,关于login screen/splash screen的分析,且看这篇著名博文Introducing the concept of “Places”,在看完后想想用popup来做.登录注册页面在很多地方会被调用到,使用page会导致页面间跳转逻辑比较乱。

思路二:popup

popup只是个容器,设置Child为什么都可以,然后IsOpen=true;就显示出来了。

问题一:popup的Child可以是page吗?

答案是可以的。

signInUpPopup = new Popup();
//SignInUp为Page,改造过了
Guanjia.Views.SignInUp signInUp = new Guanjia.Views.SignInUp(this, signInUpPopup, 480, 728, 0);//this);
//这个不用解释了
signInUpPopup.Child = signInUp;
signInUpPopup.IsOpen = true;

然后更多问题出来了。

问题二:

当按下BackKey键的时候,Popup出来的页面连同父Page全部关掉了,不是我们期望的Popup消失的效果。所以要处理下。

private void doSignInUp(){signInUpPopup = new Popup();//SignInUp为Page,改造过了Guanjia.Views.SignInUp signInUp = new Guanjia.Views.SignInUp(this, signInUpPopup, 480, 728, 0);//this);//登录注册成功后回调了signInUp.OnSuccess += new EventHandler(signInUp_OnSuccess);//这个不用解释了signInUpPopup.Child = signInUp;//一下三行处理BackKey冲突signInUpPopup.Loaded += new RoutedEventHandler(signInUpPopup_Loaded);signInUpPopup.Unloaded += new RoutedEventHandler(signInUpPopup_Unloaded);signInUpPopup.Closed += new EventHandler(signInUpPopup_Closed);signInUpPopup.IsOpen = true;}
void signInUpPopup_Unloaded(object sender, RoutedEventArgs e){//草草草 没被调用Debug.WriteLine("Popup Unloaded here");this.BackKeyPress += Main_BackKeyPress;}public void AddBackKeyPressHandle(){this.BackKeyPress += Main_BackKeyPress;}void signInUpPopup_Loaded(object sender, RoutedEventArgs e){this.BackKeyPress -= Main_BackKeyPress;}void signInUpPopup_Closed(object sender, EventArgs e){Debug.WriteLine("Popup closed here");this.BackKeyPress += Main_BackKeyPress;}void signInUpPopup_Opened(object sender, EventArgs e){this.BackKeyPress -= Main_BackKeyPress;}

问题三:Popup出来的Page的ApplicationBar不对(在父Page里我没设ApplicationBar,所以popup出来也没有 ApplicationBar),popup出来的page可以有ApplicationBar吗?我跑到stackoverflow一问: Is it possible to popup a sigin/up page(pivot) with appbar?。得到答案可以。

以下为改造过的登录页面

public partial class SignInUp : PhoneApplicationPage{private PhoneApplicationPage page = null;private IApplicationBar parentAppBar = null;private Popup popup = null;//public static event EventHandler OnSuccess;public SignInUp(){InitializeComponent();page = this;}public SignInUp(PhoneApplicationPage parentpage, Popup popup, int width, int height, int selectedIndex = 0){InitializeComponent();page = parentpage;this.popup = popup;this.Height = height;this.Width = width;//SignInUpPivot.SelectedIndex = selectedIndex;parentAppBar = parentpage.ApplicationBar;this.Loaded += (s, e) =>{page.BackKeyPress += page_BackKeyPress;};this.Unloaded += (s, e) =>{page.ApplicationBar = parentAppBar;page.BackKeyPress -= page_BackKeyPress;};}void page_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e){popup.IsOpen = false;e.Cancel = true;}
private void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e){int selectedIndex = (sender as Pivot).SelectedIndex;if (selectedIndex == 0){page.ApplicationBar = (Microsoft.Phone.Shell.ApplicationBar)Resources["SignInAppbar"];}else if (selectedIndex == 1){page.ApplicationBar = (Microsoft.Phone.Shell.ApplicationBar)Resources["SignUpAppbar"];}}

问题4:无法使用Code4Fun toolkit里的ToastPrompt来进行提示。网上一搜,c4f的开发者说ToastPrompt是所在层级与popup不一样(在popup之下,page之上),看了一下源码它使用了自己实现的popup来实现ToastPrompt。把c4f里的ToastPrompt改造成使用的Popup来实现,效果不好,但总算能显示在弹出来的东西之上,效果不好。

问题5:注册页里的TextBox会被弹出来的键盘遮住,不能像page那样自动向上移动。同样有人问了这样的问题:

http://webcache.googleusercontent.com/search?q=cache:aGfMs1FXRZcJ:forums.create.msdn.com/forums/t/74943.aspx+wp7+textbox+in+popup+keyboard&cd=5&hl=zh-TW&ct=clnk&gl=hk

这个真心没找到解决方案。

可见Popup来实现缺点太多。

思路三:还是用Page,只有一个问题:如何在登录成功后执行/通知前一个页面,执行一些操作,更新UI等?

解决方法:

1在SignInUp页里加一个可以登录注册成功事件,以便前一个页面添加回调

public partial class SignInUp : PhoneApplicationPage{//回调public static event EventHandler OnSuccess;public SignInUp(){InitializeComponent();}

2登录注册成功后调用OnSuccess

XXXService.Login(username, password, delegate(int loginResult){switch (loginResult){case 1://登录成功//Main.ToastMessage = "登录成功";App.CurrentAccount = new Account{Username = username,Password = password,};if (AutoSignInCheckBox.IsChecked == true){GuanjiaPersistentUserDatas.Account = App.CurrentAccount;}//调用回调if (OnSuccess != null){OnSuccess(null, null);}this.NavigationService.GoBack();//do something herebreak;case -1:ToastHelper.GetBasicToast("用户密码错误", "登录失败").Show();break;case -2:ToastHelper.GetBasicToast("用户不存在", "登录失败").Show();break;default:break;}},

3在父页面中只需在navigation到SignInUp.xaml前多一个步骤

private void doSignInUp(){SignInUp.OnSuccess += new EventHandler(signInUp_OnSuccess);NavigationService.Navigate(new Uri("/Views/SignInUp.xaml?Action=SignIn", UriKind.Relative));}

DONE!

转载于:https://my.oschina.net/wingyiu/blog/72793

如何做WP的登录/注册功能相关推荐

  1. Axure实战——实现登录注册功能

    背景 在做系分项目原型的时候,我需要做一个简单的登录注册模块.但要实现这个功能,只是看我之前写的博客中的相关教程是远远不够的.因此,我需要重新开始摸索,便有了这篇博客. 为了完成该功能,我们需要用到两 ...

  2. 在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)

    在线登录注册功能(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库) 完整的项目已上传github仓库,链接在文章最下面 注:笔者在安卓客户端部分写了kotlin语言和java语 ...

  3. 表单实现登录注册功能

    为了开发出一个家教信息服务网站,家教注册登录,家教信息发布这些都需要通过表单还实现. 系列文章汇总: 一.整体设计:家教信息服务平台的开发 二.前端设计:表单实现登录注册功能 三.后台设计:MySQL ...

  4. android如何实现用户注册功能,Android 实现简单的登录注册功能(SharedPreferences和SQLite)...

    最近恰好作了一个Android的登陆注册界面,将数据利用SharedPreferences或者SQLite绑定到Android程序中,实现简单的登录注册功能,本文未涉及到与服务器的交流.java 首先 ...

  5. 使用JSP实现简单的登录注册功能,并且使用Session跟踪用户登录信息

    使用JSP实现简单的登录注册功能,并且使用了Session来跟踪用户的登录信息,这个是用纯JSP来实现此功能的,由于没有连接数据库,所以使用List来模拟数据库. 第一步:创建web项目 如果有不会创 ...

  6. 基于android校园订餐APP,简单实现登录注册功能(SharedPreferences)

    基于android校园订餐APP,简单实现登录注册功能(SharedPreferences) 欢迎浏览本篇文章 界面效果图 页面设计代码 源代码 欢迎浏览本篇文章 大家好! 这是小编首次在博客上写的文 ...

  7. vue+node---使用element框架实现的前后台用户登录注册功能

    为了更进一步清晰地了解前台数据向后台提交的过程,更好地加强巩固前端开发学习,整理了基础的[前后台用户登录注册功能]实现代码.后台通过node.js开发,数据存储在sqlite中,前台vue+eleme ...

  8. javaweb开发的仿推特项目之登录注册功能

    博主最近学习一个仿推特javaweb项目,其采用Jsp+Servlet的方式进行设计,MySQL数据库,Tomcat8服务,界面上十分美观,功能也较为健全,给大家分享一下: 项目地址 登录界面: 核心 ...

  9. Spring Boot + MyBatis :登录注册功能

    ** 个人博客:[http://wj2y.cn/] ** 1. 编写实体类 用户登录注册这里做的比较简单,只做了用户名和密码,所以实体类User.java中只需要username.password两个 ...

最新文章

  1. 请不要将抛出异常作为业务逻辑使用!!!
  2. oauth password模式_史上最干的Oauth案例分析
  3. 类加载机制-双亲委派,破坏双亲委派--这一篇全了解
  4. 图像处理实战 多张曲线同图共舞
  5. [转].NET下读取PDF文本
  6. Hive on Tez出现exec.Task: Failed to execute tez graph. java.lang.NullPointerException
  7. js中函数的使用方式及回调函数
  8. mysql 查询 带数据库实例_数据库查询实例(包含所有where条件例子)
  9. js_long.php,protobuf.js 与 Long.js的使用详解
  10. java jdbc 批处理_Java JDBC批处理插入数据操作
  11. 动态路由协议之OSPF
  12. anspython_python堆(heapq)的实现
  13. uni-app 使用高德地图
  14. Word制作音乐简谱(转)
  15. navicat导入sql语句
  16. (十二)c#Winform自定义控件-分页控件
  17. 你所不知道的那些阿里面试|原来我也可以从小白到年薪百万!
  18. 汇编(二)——ARM数据处理指令——算术运算、数据传送
  19. M1 Mac 上安装 python mysqlclient
  20. 拼多多商家和快递公司谈合作的技巧

热门文章

  1. 如何在Windows中的命令提示符下删除特定目录中的文件/子文件夹
  2. 通过整数索引选择一行熊猫系列/数据框
  3. 如何在Shell脚本中漂亮地打印JSON?
  4. ros开发增加clion常用模板及初始化配置(三)
  5. markdown 本地链接_markdown多平台发布及七牛图床使用
  6. java架构说明书_JDBC 使用说明(流程、架构、编程)
  7. qtable sorting enable中文是按照什么顺序_作为雅思过来人,你有什么话想告诫雅思小白的?...
  8. 创建一个简单的数据库
  9. php 相对时间,php返回相对时间(如:20分钟前,3天前)的方法
  10. python中函数startswith的用法_Python中的startswith和endswith函数使用实例