栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

深入解析:打造自动消失的对话框

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

深入解析:打造自动消失的对话框

原理:使用Popup控件,并且设置Popup控件的位置居中。

1:新建自定义控件PopupBorder,作为Popup的child。代码如下:
复制代码 代码如下:
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
   
       
                            Storyboard.TargetName="LayoutRoot"
                Storyboard.TargetProperty="Opacity"
                    From="1.0" To="0" Duration="0:0:1"
                    AutoReverse="True" />
       

   

   
       
       
           
               
                   
                   
                   
               

           

           
               
           

                                   FontSize="28" Foreground="White" FontFamily="Comic Sans MS"
                       >This is a Simple Example

       

   



 

新建PopupDemo页面,代码如下:

复制代码 代码如下:

       
           
       

   


后台cs代码为:
复制代码 代码如下:
private void ShowPopup_Clicked(object sender, RoutedEventArgs e)
        {
            Popup popup = new Popup();

            //设置popup的Child属性为自定义的用户控件。
             popup.Child = new PopupBorder();
            popup.IsOpen = true;
        }

复制代码 代码如下:
popUp.LayoutUpdated += delegate
            {
                popUp.Margin = new Thickness(
                        (App.Current.Host.Content.ActualWidth - pborder.ActualWidth) / 2,
                        (App.Current.Host.Content.ActualHeight - pborder.ActualHeight) / 2,
                        0,
                        0);
            };

完整的代码如下:
复制代码 代码如下:
PopupBorder pborder = new PopupBorder();

Popup popUp = new Popup();

//设置popup的Child属性为自定义的用户控件。
popUp.Child = pborder;
popUp.LayoutUpdated += delegate
{
    popUp.Margin = new Thickness(
            (App.Current.Host.Content.ActualWidth - pborder.ActualWidth) / 2,
            (App.Current.Host.Content.ActualHeight - pborder.ActualHeight) / 2,
            0,
            0);
};
popUp.IsOpen = true;

运行可以发现弹出的消息已经居中了,那么如何让它自动消失呢??,

要想自动消失还得使用定时器,过了一段时间后定时器将popUp控件的 IsOpen属性设置为false,这样窗口就关闭了。

于是在LayoutUpdated中增加定时器代码:
复制代码 代码如下:
popUp.LayoutUpdated += delegate
            {
                popUp.Margin = new Thickness(
                        (App.Current.Host.Content.ActualWidth - pborder.ActualWidth) / 2,
                        (App.Current.Host.Content.ActualHeight - pborder.ActualHeight) / 2,
                        0,
                        0);

                System.Threading.Timer timer = new System.Threading.Timer(
                    (state) =>
                    {
                        popUp.Dispatcher.BeginInvoke(() =>
                        {
                            popUp.IsOpen = false;
                        });
                    }, null, 500, 500);
            };

在过了500秒后,将popUp. IsOpen设置为false。

运行可以发现窗口可以自动消失了。

 

可以看到弹出窗口一下就关闭了,那么能不能慢慢的渐变的消失呢??

为了实现渐变的消失,那么就应该使用动画了。

首先在PopupBorder中增加
复制代码 代码如下:

       
                            Storyboard.TargetName="LayoutRoot"
                Storyboard.TargetProperty="Opacity"
                    From="1.0" To="0" Duration="0:0:1"
                    AutoReverse="True" />
       

   


当然上面的PopupBorder代码中已经有了这段代码了,动画使用了DoubleAnimation,设置LayoutRoot 对象的Opacity属性在1秒的时间内从1,变到0。

接着在PopupDemo页面的按钮事件里面在popUp.Child = pborder;后面增加如下代码来执行动画:
复制代码 代码如下:
//设置popup的Child属性为自定义的用户控件。
popUp.Child = pborder;

pborder.myStoryboard.Completed += delegate
{
    popUp.IsOpen = false;
};
pborder.myStoryboard.Begin();

然后将Clicked中的代码进行重构。

新建MessageBoxHelper类:

代码如下:
复制代码 代码如下:
public class MessageBoxHelper
{
    #region 提示消?息¡é

    ///


    /// 弹出提示消息标题为提示,按钮为确定
    ///

    ///
    public static void ShowMessage(string msg)
    {
        //ShowFriendMessage(msg, "提示", MessageBoxButton.OK);

        PopupBorder pborder = new PopupBorder();
        pborder.txtMessage.Text = " " + msg + " ";

        pborder.UpdateLayout();

        Popup popUp = new Popup();
        popUp.Child = pborder;


        pborder.myStoryboard.Completed += delegate
        {
            popUp.IsOpen = false;
        };
        pborder.myStoryboard.Begin();


        popUp.InvokeonLayoutUpdated(() =>
        {
            popUp.Margin = new Thickness(
                (App.Current.Host.Content.ActualWidth - pborder.ActualWidth) / 2,
                (App.Current.Host.Content.ActualHeight - pborder.ActualHeight) / 2,
                0,
                0);

            System.Threading.Timer timer = new System.Threading.Timer(
                (state) =>
                {
                    popUp.Dispatcher.BeginInvoke(() =>
                    {
                        popUp.IsOpen = false;
                    });
                }, null, 500, 500);
        });
        popUp.IsOpen = true;

    }

    ///


    /// 弹出提示消息按钮为确定
    ///

    ///
    public static void ShowMessage(string msg, string title)
    {
        ShowMessage(msg, title, MessageBoxButton.OK);
    }

    ///


    /// 弹出提示消息
    ///

    ///
    public static void ShowMessage(string msg, string title, MessageBoxButton buttons)
    {
        MessageBox.Show(msg, title, buttons);
    }

    #endregion
}

使用的时候只需要MessageBoxHelper.ShowMessage(“Hello World”);就可以了。注意别忘记了PopupBorder控件。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/127307.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号