设为首页 收藏本站
查看: 1194|回复: 0

[Windows 8] 开发初体验:对话框(MessageBox)和程序任务栏(ApplicationBar)

[复制链接]

尚未签到

发表于 2015-5-22 12:06:03 | 显示全部楼层 |阅读模式
  相信不少开发Windows 8程序的朋友都是从传统.NET开发或Windows Phone开发迁移的,对于很多内容新上手确实不太容易掌握,我最近也准备开一个Windows 8的项目,这几天初步看了一下SDK中的内容,写两个小Tip,高手请绕行,希望对新手有帮助。
  
  1. 对话框 - MessageBox
  MessageBox是最基础的传统.NET类库中的一员,不管是Windows Form,Windows Phone,WPF,Silverlight我相信大家第一次接触这些客户端编程的时候都会用MessageBox.Show()去显示一下我们想看到的信息,但是在Windows 8 RT中,MessageBox消失了,取而代之的是一个叫MessageDialog的新对话框:
  首先给大家看一个最传统的用法:
  


MessageDialog md = new MessageDialog("test", "Title");
md.ShowAsync();   
  乍看上去这个用法没问题,而且显示的效果在Hello World这样的程序里也不会有异样,但是仔细看一下,Show后面多了一个Async的字样,看到这里就要告诉大家,这个用法是一个病态方式来显示对话款。
  解释一下原因,首先Windows 8 RT的程序和传统应用程序有一定差别,很重要的一点就是动态磁贴,既然是叫动态,那么我们希望它始终是动态显示的,不受其他操作的阻碍,如果按照刚才代码来实现对话框的话,主线程的内容将停止一切动态动作,这样就给使用者非常不好的用户体验,Windows 8 RT的API中早已预料到这一点,所以Async就派上了用场,接着先看一下正确的代码:
  


private async void Button1_Click(object sender, RoutedEventArgs e) {
    MessageDialog md = new MessageDialog("This is a MessageDialog", "Title");
    await md.ShowAsync();
}  
  上面的代码有亮点需要注意,首先是按钮点击事件中多了一个async关键词,这个是C# 5.0的新特性,大家可以先理解为一个简单的异步,具体的大家可以搜一下,相信资料很多,另外就是对话框的show方法前面有一个await的关键字,这样既可实现主线程不阻塞的对话框,这里注意,async和await需要配合使用。
DSC0000.png
  简单的使用如上述内容,但是有的时候我们还需要给对话框的操作结果作判断,然后执行不同的后续操作,这里MessageDialog也给出的方法,代码如下:
  


private async void Button1_Click(object sender, RoutedEventArgs e) {
    MessageDialog md = new MessageDialog("This is a MessageDialog", "Title");
    bool? result = null;
    md.Commands.Add(
       new UICommand("OK", new UICommandInvokedHandler((cmd) => result = true)));
    md.Commands.Add(
       new UICommand("Cancel", new UICommandInvokedHandler((cmd) => result = false)));

    await md.ShowAsync();
    if (result == true) {
        // do something   
    }
    Button1.Content = result.ToString();
}  
  大家可以根据这个方法自定义Dialog的显示,虽然感觉比以前复杂了,但是比以前的可扩展性增强了不少。
  以上就是对话框的内容,希望新手朋友们有用。
  
  2. 程序任务栏 - ApplicationBar
  说到任务栏,其实起源于Windows Phone,做过Windows Phone开发的朋友应该很清楚任务栏的功能,因为默认项目摸板中就带有任务栏的代码,而且修改起来也非常方便,但在Windows 8 RT中对任务栏的实现方式做了不小的变化,首先是任务栏不会被作为一个页面框架中的一部分,而是变为了页面布局中的一个成员,大家可以根据自己的需求完全定制任务栏的样式,大小等等内容,看一个简单的代码:
  


   
        
            
            
        
        
        
            
               
            
        
      

  更标准的用法如下:
  


   
        
            
               
            
        
   
   
        
            
               
            
        
      
  这就是最简单的代码,大家只要把这段代码替换掉Windows 8 Application里的空白页面中的Grid即可。
  这段代码实现的效果如下:
DSC0001.jpg
  
  会在程序最下方建立一个100像素的任务栏,当鼠标右击时出现。
  当然,这个100像素是可以调整的,其中的StackPanel也是一个传统容器,可以加很多内容进去,但是尽量遵循Metro设计准则。
  

  以上就是我要分享内容,最近开了一个Windows Phone开发社区,也欢迎大家前往发帖,提问:
  http://bbs.wpcome.com
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69557-1-1.html 上篇帖子: 对比Windows 8模拟器(Simulator)和Windows Phone仿真器(Emulator) 下篇帖子: 推荐微软Windows 8 Metro应用开发虚拟实验室
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表