WP7开发中使用自定义的弹出窗口

关键词:WP7开发;自定义控件;自定义窗口;MessagePrompt


今天与大家分享一下WP7开发中如何使用自定义的弹出窗口,为MessageBox寻找一种替代方案。

两种方法:

1. 使用Coding4Fun提供的MessagePrompt(本人比较推荐这种方法);

2. 自定义UserControl,自己设计窗口布局。


本人在上述两种方案中间选择了前者作为MessageBox的替换方案,原因是简单,可定制性也比较强,可以很容易地将MessageBox替换为MessagePrompt.下面详细讲述。


1. 使用Coding4Fun提供的MessagePrompt

先决条件:下载Coding4Fun并添加对Coding4Fun.Toolkit.Controls的引用,如下图所示。(如果不知道怎么做,可随意参考一篇网上的教程,类似的教程非常多。)

下载地址:http://coding4fun.codeplex.com/


下面讲述MessagePrompt的使用方法。

必要的命名空间:

using Coding4Fun.Toolkit.Controls;

在你需要的地方,或者原先工程代码中有MessageBox的地方,参考如下代码段使用MessagePrompt:

private void button_Click(object sender, RoutedEventArgs e) //新建
        {
            var MymsgPrompt = new MessagePrompt
            {
                Title = "Notice",                //标题
                Body = new TextBlock             //body,可定制性非常强,可以设置文字颜色,大小,换行方式等等
                {
                    Text = "I'm MessagePrompt ^_^",
                    Foreground = new SolidColorBrush(Colors.White),
                    FontSize = 25,
                    TextWrapping = TextWrapping.Wrap
                },
                Background = new SolidColorBrush(Colors.Purple),   //消息框的背景色
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,   //对齐方式
                Width = 500,      //消息框的宽度
                IsAppBarVisible = true,   //true表示保留OK按钮,没有这个语句,OK按钮也是会默认保留的
                IsCancelVisible = true    //true表示保留Cancel按钮
            };

            MymsgPrompt.Completed += stringObject_Completed;    //该函数用来处理用户点击OK按钮或Cancel按钮的事件
            MymsgPrompt.Show();      //显示如上样式的MessagePrompt
        }

void stringObject_Completed(object sender, PopUpEventArgs<string, PopUpResult> e)
        {
            if (e.PopUpResult == PopUpResult.Ok)
            {
                //用户点击OK按钮时要进行的事情
            }
            else if (e.PopUpResult == PopUpResult.Cancelled)
            {
                //用户点击Cancel按钮时要进行的事情
            }
        }

看看效果图吧!怎么样,是不是比MessageBox漂亮了许多,此外,这个窗口在出现和消失的时候还带有动画效果哦!


上面是通过使用Coding4Fun中提供的MessagePrompt实现自定义弹出窗口。使用起来非常非常简单,在任何想用的地方将上述代码段贴过去,按照自己的喜好修改一下即可!

还有一种通过自定义控件实现自定义弹出窗口的方法。下面借着网上的一篇博文进行补充讲述,这个博文我刚开始看的时候,最大的感触是:讲的不够清楚。后来经过摸索才发现是怎么回事。如果原文作者认为我直接借着您的文章进行发挥不太妥,请通知我,我会即刻进行处理。


2. 自定义UserControl,自己设计窗口布局

原博文的链接地址:http://www.cnblogs.com/linzheng/archive/2012/03/20/2409071.html

首先要感谢原文作者加菲猫的分享,让我最终学习了这种实现方法。

但是原文中有些地方讲述的不清楚,导致一些读者看了之后,反映说是照着博主的代码做会报错。下面我讲述一下如何使用博主提供的代码。

(1)如何建立工程

大家可以看到上述链接中的文章所显示的图片中有2个项目,其中一个是Windows Phone应用程序项目,一个是Windows Phone类库项目。大家在新建项目的时候,可以先建立应用程序项目TestMessageControl,然后在解决方案资源管理器中,右键点击,并选择“添加”--->"新建项目",再选择新建Windows Phone类库项目即可,如下图所示。至此,两个项目就建立好了。按照原博文把代码贴进去。注意:Themes下面的Generic.xaml.cs是空白的。


2. 设置项目的依赖关系

很多读者表示,按照原博文的代码去做,会有“找不到这,找不到那”的报错。原因在于:还需要在TestMessageControl中添加对MessageControl的引用。具体做法如下:

如上图所示,右击“解决方案”,在菜单中选择“项目依赖项”,在弹出的“项目依赖项”窗口中按下图进行设置,即:项目TestMessageControl要依赖于MessageControl。


接着,在项目TestMessageControl下的“引用”一项上点击鼠标右键,选择“添加引用”,并在弹出的“添加引用”窗口中点击“项目”选项卡,选择MessageControl,确定!

  

如果你完成了如上步骤,再去运行原博文的代码,你会发现所有的报错都木有了!


后记:

对比上述两种方法,我更喜欢第一种。因为简单,所以喜欢^_^

事实上,在实践第二种方法的过程中,我遇到2个很困惑的问题:

问题一:当用户点击自定义窗口中的“是”或者“OK”按钮的时候,应该如何处理该事件?

因为对这个事件的处理是放在用户自定义控件页面对应的代码文件WindowsPhoneControl1.xaml.cs中的,显然在这个地方是无法处理使用了自定义窗口的页面上的event的。

问题二:每个自定义弹出窗口上只能显示特定的提示字符串,如果我需要多个弹出窗口且要显示不同的字符串,我应该如何操作?

显然,对每一种窗口单独进行一次定制,这样的方法可行,但是不符合工程规范。有没有更有效的办法呢?

上述两个问题,如果亲爱的读者您懂得,希望不吝告之,先谢过了!


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值