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

来源:互联网 发布:ubuntu 16.04分区 编辑:程序博客网 时间:2024/06/14 07:57

关键词: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的。

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

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

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


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 海关包裹被扣怎么办 天猫未收货显示签收怎么办 物流显示包裹破损怎么办 快递寄鞋盒破损了怎么办 邮寄东西碎了怎么办 快递屏幕碎了怎么办 快递东西破了怎么办 收快递东西损坏怎么办 快递寄新鲜东西怎么办 寄东西损坏了怎么办 顺丰写错电话号码已签收怎么办 快递包装扔了怎么办 淘宝快递损坏了怎么办 买家寄过来破损怎么办 卖家发假单号自动签收怎么办 ems快递包裹破损怎么办 微波炉外包装扔掉退货怎么办 交警判决不服该怎么办 如果判决不服该怎么办 学不会看卡尺怎么办 我学不会卡尺怎么办 卡尺表针歪了怎么办 电喷摩托车没电怎么办 话筒插头坏了怎么办 电柜接线看不懂怎么办 发动机缸盖渗油怎么办 吃杏吃多了肚子难受怎么办 住院单据丢了怎么办 医院单据丢了怎么办 购房单据丢了怎么办 废电瓶回收手续怎么办 ai置入图片过大怎么办 ps 弄错纸张大小怎么办 屁股沟发炎红肿怎么办 房间里床太大怎么办 房间太小放不下桌子怎么办 没衣柜一堆衣服怎么办 玻璃笔坏了怎么办 玻璃笔头断了怎么办 学校教室有苍蝇怎么办 高中生书不够放怎么办