Windows Phone 7 自定义弹出窗口

转载 2012年03月30日 23:27:12


Windows Phone内置的MessageBox弹出窗口局限性太大,不能满足各种个性化的弹出窗口的需求,即使使用第三方的控件库也会有一些局限性,又或者封装的东西太多了,那么这时候就需要自己去根据自己的需求去自定义一个弹出窗口了。大概的原理就是使用Popup控件来实现弹出窗的效果,Popup控件可以把包含在其中的控件显示在最外

Windows Phone内置的MessageBox弹出窗口局限性太大,不能满足各种个性化的弹出窗口的需求,即使使用第三方的控件库也会有一些局限性,又或者封装的东西太多了,那么这时候就需要自己去根据自己的需求去自定义一个弹出窗口了。

  大概的原理就是使用Popup控件来实现弹出窗的效果,Popup控件可以把包含在其中的控件显示在最外面,从而可以把当前页面的控件都给盖住了,再加点半透明的效果,若隐若现的,一个弹窗就出来了。好吧,下面来看一下Demo

  先看一下demo的结构。

 

Generic.xaml

<ResourceDictionary
   
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   
xmlns:local="clr-namespace:MessageControl;assembly=MessageControl"
   
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
    mc:Ignorable="d"
   
>
   
<StyleTargetType="local:MyMessage">
       
<SetterProperty="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
       
<SetterProperty="FontSize" Value="{StaticResource PhoneFontSizeNormal}"/>
       
<SetterProperty="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
       
<SetterProperty="Background" Value="Snow"/>
       
<SetterProperty="Width" Value="480"/>
       
<SetterProperty="Height" Value="800"/>
       
<!--定义模板的Template-->
       
<SetterProperty="Template">
           
<Setter.Value>
               
<ControlTemplateTargetType="local:MyMessage">
                   
<Grid VerticalAlignment="Stretch">
                       
<Rectangle x:Name="backgroundRect" Grid.Row="0"Fill="Black" Opacity="0.7"/>
                       
<Border
                           
VerticalAlignment="Top"
                           
BorderThickness="3"
                           
BorderBrush="Black">
                           
<StackPanel Margin="0">
                               
<ContentPresenter x:Name="body"/>
                           
</StackPanel>
                       
</Border>
                   
</Grid>
               
</ControlTemplate>
           
</Setter.Value>
       
</Setter>
   
</Style>
</ResourceDictionary>

using System.Windows;
using System.Windows.Controls;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;
using Microsoft.Phone.Controls;

namespace MessageControl
{
   
publicclass MyMessage : ContentControl
   
{
        privateSystem.Windows.Controls.ContentPresenter body;
       
privateSystem.Windows.Shapes.Rectangle backgroundRect;
       
privateobject content;

       
publicMyMessage()
       
{
            //这将类的styleKey设置为MyMessage,这样在模板中的style才能通过TargetType="local:MyMessage"与之相互绑定
            this.DefaultStyleKey= typeof(MyMessage);
       
}
        //重写OnApplyTemplate()方法获取模板样式的子控件
        publicoverridevoid OnApplyTemplate()
       
{
            base.OnApplyTemplate();
           
this.body= this.GetTemplateChild("body") as ContentPresenter;
           
this.backgroundRect= this.GetTemplateChild("backgroundRect") as Rectangle;
           
InitializeMessagePrompt();
        }
        //使用Popup控件来制作弹窗
        internalPopup ChildWindowPopup
       
{
            get;
           
privateset;
       
}
        //获取当前应用程序的UI框架PhoneApplicationFrame
        privatestatic PhoneApplicationFrame RootVisual
       
{
            get
           
{
                returnApplication.Current == null ? null :Application.Current.RootVisual as PhoneApplicationFrame;
           
}
        }
        //弹窗的内容,定义为object,可以赋值为各种各样的控件
        publicobject MessageContent
       
{
            get
           
{
                returnthis.content;
           
}
            set
           
{
                this.content= value;
           
}
        }
        //隐藏弹窗
        publicvoid Hide()
       
{
            if (this.body != null)
           
{
                //关闭Popup控件
                this.ChildWindowPopup.IsOpen= false;
           
}
        }
        //判断弹窗是否打开
        publicbool IsOpen
       
{
            get
           
{
                returnChildWindowPopup != null && ChildWindowPopup.IsOpen;
           
}
        }
        //打开弹窗
        publicvoid Show()
       
{
            if (this.ChildWindowPopup == null)
           
{
                this.ChildWindowPopup= new Popup();
               
this.ChildWindowPopup.Child= this;
           
}

            if (this.ChildWindowPopup != null && Application.Current.RootVisual!= null)
           
{
               InitializeMessagePrompt();
                this.ChildWindowPopup.IsOpen= true;
           
}
        }
        //初始化弹窗
        privatevoid InitializeMessagePrompt()
       
{
            if (this.body == null)
               
return;
           
this.backgroundRect.Visibility= System.Windows.Visibility.Visible;
           
//把模板中得body控件内容赋值为你传过来的控件
            this.body.Content= MessageContent;
      
     this.Height = 800;
       
}
    }
}

  简单地创建有一个控件作为弹窗的内容,测试一下弹窗的效果,当然弹窗的控件你可以定义为你想要的各种内容。

 

 

 

Windows Phone 7 自定义弹出窗口

Windows Phone内置的MessageBox弹出窗口局限性太大,不能满足各种个性化的弹出窗口的需求,即使使用第三方的控件库也会有一些局限性,又或者封装的东西太多了,那么这时候就需要自己去根据自...
  • u012823326
  • u012823326
  • 2013年11月14日 00:55
  • 571

打造自定义弹出框

自定义弹出框的使用还是比较频繁,本次主要讲解自定义弹出框和使用的封装,通过接口利于维护。 首先给出自定义弹出框的实现: public class CustomPopupWindow extends ...
  • tangzhide
  • tangzhide
  • 2016年10月09日 19:44
  • 519

C# winForm自定义弹出页面

在C#的windows窗体应用程序中,添加弹出框效果.最后就是这样的效果.     页面Form2上有2个文本框,textBox1和textBox2.点击任意一个文本框,根据准备好的数据,弹出Form...
  • liuyanlinglanq
  • liuyanlinglanq
  • 2015年04月30日 09:33
  • 4594

通过纯JS和css实现自定义弹出对话框

需求: 实现通过一个弹出对话框来选择下拉列表中对应值进行参数设置操作,及弹出对话框中需要有一个下拉列表输入和一个确定按钮即可,要求弹出对话框后,背部界面不能够操作或者被屏蔽灰掉。 思路: 1.开...
  • wuruixn
  • wuruixn
  • 2013年03月18日 13:58
  • 10917

windows窗口类型

windows建立的是怎样的一套窗口理论体系, window窗口有下面的几个基本的分类 Overlapped Windows 重叠窗口 Pop-up Windows 弹出窗口 Child Wi...
  • dingyuduan
  • dingyuduan
  • 2015年01月05日 19:48
  • 3701

Windows Phone 自定义弹出框和 Toast 通知

工程源码下载   注:这篇文章主要介绍在 应用全局所有页面使用的自定义弹出框,如果仅在 MainPage 页面询问用户是否 是否退出,可参考: 简化版“询问用户是否退出”   1、 首先介绍如何自定义...
  • as2712101
  • as2712101
  • 2014年02月18日 13:55
  • 542

Windows phone 7之生命周期

原文地址:http://www.cnblogs.com/xiaogeer/archive/2012/04/08/2437186.html WP7的生命周期一般说的是整个应用程序的声明周期,而不注...
  • zhaogengzi
  • zhaogengzi
  • 2014年01月16日 14:18
  • 543

iOS自定义弹出视图,以及简单的手势讲解

学习iOS也有一段时间了。也在试着用iOS来写项目,感谢各路大神的帮助,就不一一@了。本文只是记载本人的学习过程。                                       ...
  • quanhaoH
  • quanhaoH
  • 2014年12月09日 21:11
  • 1274

CSS3/jQuery自定义弹出窗口

简单演示一下,精简了演示效果和css样式文件,更利于在项目中的实际应用 引入style.css   index.js [html] view plaincopy ...
  • younger_z
  • younger_z
  • 2014年06月03日 15:59
  • 675

jQuery实现自定义样式的弹出窗口和确认框

(function () { $.MsgBox = { Alert: function (title, msg) { GenerateHtml("ale...
  • qiuzhi__ke
  • qiuzhi__ke
  • 2015年09月02日 00:15
  • 18669
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows Phone 7 自定义弹出窗口
举报原因:
原因补充:

(最多只允许输入30个字)