当前位置:编程学习 > wap >>

Windows Phone 7 自定义弹出窗口

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"
    >
    <Style TargetType="local:MyMessage">
        <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/>
        <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeNormal}"/>
        <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
        <Setter Property="Background" Value="Snow"/>
        <Setter Property="Width" Value="480" />
        <Setter Property="Height" Value="800" />
        <!--定义模板的Template-->
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="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
{
    public class MyMessage : ContentControl
    {
        private System.Windows.Controls.ContentPresenter body;
        private System.Windows.Shapes.Rectangle backgroundRect;
        private object content;

        public MyMessage()
        {
            //这将类的styleKey设置为MyMessage,这样在模板中的style才能通过TargetType="local:MyMessage"与之相互绑定
            this.DefaultStyleKey = typeof(MyMessage);
        }
        //重写OnApplyTemplate()方法获取模板样式的子控件
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            this.body = this.GetTemplateChild("body") as ContentPresenter;
            this.backgroundRect = this.GetTemplateChild("backgroundRect") as Rectangle;
            InitializeMessagePrompt();
        }
        //使用Popup控件来制作弹窗
        internal Popup ChildWindowPopup
        {
            get;
            private set;
        }
        //获取当前应用程序的UI框架PhoneApplicationFrame
        private static PhoneApplicationFrame RootVisual
        {
            get
            {
                return Application.Current == null ? null : Application.Current.RootVisual as PhoneApplicationFrame;
    &n

补充:移动开发 , Windows Phone ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,