新的开始

不以物喜,不以己悲

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

我的第一个WP8.1应用总结

  我的LUMIA925已经买了很久了,想自己开发WP应用放在上面,却一直想不到有什么特别的想法和需要。前几天的事情正好让我有了这个机会。

  前几天在客户机房工作的时候,同事打电话来说另一个客户由于换了电脑,需要发新的激活码过去激活我们的软件。我不得不打开本本,把同事发到手机QQ的机器码输入到本本上的注册机程序里,再把生成的激活码输入到手机发过去。对于在外面本本不能上网的情况这真是一件繁琐的事。晚上在家没事的时候就想着把这个注册机移植到我的LUMIA925上。安装VS补丁和激活手机开发的步骤就不赘述了,具体百度之。我在VS2013中选择的是Windows Phone应用中的空白应用。

  先贴个图演示一下winform版注册机,实际用到的就是两个Label、两个TextBox和一个Button,用到的激活码生成算法也很简单,就是对机器码做一个加salt的MD5操作。

  对照winform版的界面,再考虑手机操作的便捷性,最后WP版的效果就是这样的:

  winform中的label替换成了WP中的TextBlock,另外再添加了两个AppBarButton,作为“清除”和“复制”的按钮。

  然后开始写代码,却发现一下掉到两个坑里了。。。

  坑1:WP8.1中没有默认提供MD5CryptoServiceProvider类,只能自己实现。还好在网上搜到了前人写好的,直接下载添加就可以用了。

  坑2:WP8.1应用商店APP竟然不支持对剪贴板的操作!!没办法,最后采用的是点击“复制”按钮,自动全选激活码并弹出Toast通知,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void btnCopy_Click(object sender, RoutedEventArgs e)
        {
            txtActivationCode.Focus(FocusState.Programmatic);
            txtActivationCode.SelectAll();
 
            XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
 
            // 找到模板中“'text'”元素,然后添加通知的内容
 
            XmlNodeList elements = toastXml.GetElementsByTagName("text");
 
            elements[0].AppendChild(toastXml.CreateTextNode("激活码已全选,请手动复制!"));
 
            // 通过通知的模板创建一个Toast通知
 
            ToastNotification toast = new ToastNotification(toastXml);
 
            // 弹出通知
 
            ToastNotificationManager.CreateToastNotifier().Show(toast);
 
        }

  注意1:与winform不同,在使用TextBox.SelectAll方法之前,必须先对TextBox设置焦点;

  注意2:.程序中使用Toast通知,需要在创建应用程序包之后自动生成的Package.appxmanifest中“支持Toast通知”选择“是”。效果如下:

  终于做好了我的第一个WP应用,总算对得起我的925了,只可惜复制功能还是有缺陷,只能期望WP10里能够修正这个问题。

 

posted on   新的开始  阅读(2314)  评论(7编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2010-06-26 Leadtools控件变组件问题的解决方法
点击右上角即可分享
微信分享提示