win8开发(5)——消息框

在Windows 8 Modern界面应用程序中 ,已然没有了我们过去很熟悉的MessageBox,那么,如果我们需要弹出提示框怎么办呢?
因此,我们先来认识一个类——MessageDialog(位于Windows.UI.Popups命名空间)。对的,看名字估计也能猜个七八成了,我们正是要使用该类来显示弹出对话框。
第一步,先new一个MessageDialog实例;
第二步,向Commands集合添加若干个UICommand,至少一个,最多三个,胆子大的话,你可以试试添加四个。这个UICommand就是对话框上显示的按钮,就像我们过去在传统Windows下的消息框一样,至少一个按钮,也可能两个,或者三个。
第四步,显示消息框。

光看文字是有些抽象的,这样吧,下面我们来用实例来说明。
1、启动VS,新建一个空白页面的应用程序。
2、在MainPage.xaml中声明三个按钮,分别用来显示带有一个,两个,三个按钮的弹出框

  • <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">  
  •     <StackPanel VerticalAlignment="Center">  
  •         <StackPanel Orientation="Horizontal">  
  •             <Button Content="一个按钮的消息框" Click="onOKClick"/>  
  •             <Button Content="两个按钮的消息框" Click="onYesNoClick"/>  
  •             <Button Content="三个按钮的消息框" Click="onThirdClick"/>  
  •         </StackPanel>  
  •         <TextBlock x:Name="tbTip" Margin="3,6,0,0" FontSize="24"/>  
  •     </StackPanel>  
  • </Grid>  
3、分别在三个按钮的Click事件上右击,从弹出的菜单中选择“定位到事件处理程序”,这样在代码中会自动生成事件处理方法。
4、打开代码文件,引入以下命名空间。

5、处理上面三个Click事件。
  • private async void onOKClick(object sender, RoutedEventArgs e)  
  • {  
  •     MessageDialog msg = new MessageDialog("只带一个按钮的消息框。", "提示");  
  •     msg.Commands.Add(new UICommand("确定", new UICommandInvokedHandler(OnUICommand)));  
  •     await msg.ShowAsync();  
  • }  
  •   
  • private async void onYesNoClick(object sender, RoutedEventArgs e)  
  • {  
  •     MessageDialog msg = new MessageDialog("带两个按钮的消息框。");  
  •     msg.Commands.Add(new UICommand("是",new UICommandInvokedHandler(OnUICommand)));  
  •     msg.Commands.Add(new UICommand("否", new UICommandInvokedHandler(OnUICommand)));  
  •     await msg.ShowAsync();  
  • }  
  •   
  • private async void onThirdClick(object sender, RoutedEventArgs e)  
  • {  
  •     MessageDialog msg = new MessageDialog("带三个按钮的消息框。");  
  •     msg.Commands.Add(new UICommand("重试", new UICommandInvokedHandler(OnUICommand)));  
  •     msg.Commands.Add(new UICommand("忽略", new UICommandInvokedHandler(OnUICommand)));  
  •     msg.Commands.Add(new UICommand("取消", new UICommandInvokedHandler(OnUICommand)));  
  •     // 默认按钮索引   
  •     msg.CancelCommandIndex = 2;  
  •     msg.DefaultCommandIndex = 0;  
  •     await msg.ShowAsync();  
  • }  
  •   
  • async void OnUICommand(IUICommand cmd)  
  • {  
  •     await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,  
  •         () =>  
  •         {  
  •             this.tbTip.Text = "您点击了 " + cmd.Label + " 按钮。";  
  •         });  
  • }  
在实例化UICommand时,我们使用了以下构造函数。
   
指定一个与UICommandInvokedHandler委托绑定的方法,这样,当某个UICommand被用户单击后,会调用UICommandInvokedHandler绑定的对应方法,在本例中,所有UICommand都绑定到同一个方法。

此外,MessageDialog有两个属性应当注意一下:
1、CancelCommandIndex:默认“取消”按钮的索引,这个索引是对应于Commands中添加的UICommand的索引,从0开始,按添加顺序,第一个UICommand的索引为0,第二个UICommand的索引为1,第三个为2,依此类推(当然,最多就只有三个,索引2)。假如CancelCommandIndex属性设置了1,那么,消息框中的第二个按钮就是默认的“取消”命令,只要按下ESC键就能触发。
2、DefaultCommandIndex:默认“确定”指令的索引,例如设置为0,即Commands中第一个按钮为默认命令,只要按下回车键就能触发。

要显示MessageDialog,调用ShowAsync方法,注意这个方法是异步方法,要用await关键字(C# 5.0),同时,凡是调用了异步方法并加有await关键字的方法,在定义时还要加上async关键字。
现在,我们可以运行应用程序。
 


 

 

你可能感兴趣的:(win8开发(5)——消息框)