日期:2014-05-17 浏览次数:20655 次
在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、打开代码文件,引入以下命名空间。
using Windows.UI.Popups;
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时,我们使用了以下构造函数。
public UICommand(string label, UICommandInvokedHandler action);
指定一个与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关键字。
现在,我们可以运行应用程序。