亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

深入解析:打造自動消失的對話框

2020-01-24 03:20:43
字體:
來源:轉載
供稿:網友

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

1:新建自定義控件PopupBorder,作為Popup的child。代碼如下:

復制代碼 代碼如下:

<UserControl x:Class="SLStudy.PopupBorder"
   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">
    <UserControl.Resources>
        <Storyboard x:Name="myStoryboard">
            <DoubleAnimation
                Storyboard.TargetName="LayoutRoot"
                Storyboard.TargetProperty="Opacity"
                    From="1.0" To="0" Duration="0:0:1"
                    AutoReverse="True" />
        </Storyboard>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" >
        <!--<Border Background="#FFCC0D0D" BorderThickness="0" CornerRadius="5">-->
        <Border BorderThickness="0" CornerRadius="5">
            <Border.Background>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="#FF27A3D7" Offset="0.51"/>
                    <GradientStop Color="#FF76C2E1" Offset="0.004"/>
                    <GradientStop Color="#FF27A3D7" Offset="1"/>
                </LinearGradientBrush>
            </Border.Background>
            <Border.Effect>
                <DropShadowEffect BlurRadius="10" Color="#FFCC0D0D" ShadowDepth="0"/>
            </Border.Effect>
            <TextBlock x:Name="txtMessage" HorizontalAlignment="Center" Margin="10" VerticalAlignment="Center"
                       FontSize="28" Foreground="White" FontFamily="Comic Sans MS"
                       >This is a Simple Example</TextBlock>
        </Border>
    </Grid>
</UserControl>


image 

新建PopupDemo頁面,代碼如下:

復制代碼 代碼如下:

<Grid x:Name="LayoutRoot">
        <StackPanel>
            <Button Content="Show" Click="ShowPopup_Clicked"></Button>
        </StackPanel>
    </Grid>

后臺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中增加

復制代碼 代碼如下:

<UserControl.Resources>
        <Storyboard x:Name="myStoryboard">
            <DoubleAnimation
                Storyboard.TargetName="LayoutRoot"
                Storyboard.TargetProperty="Opacity"
                    From="1.0" To="0" Duration="0:0:1"
                    AutoReverse="True" />
        </Storyboard>
    </UserControl.Resources>

當然上面的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 提示消?息¡é

    /// <summary>
    /// 彈出提示消息標題為提示,按鈕為確定
    /// </summary>
    /// <param name="msg"></param>
    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;

    }

    /// <summary>
    /// 彈出提示消息按鈕為確定
    /// </summary>
    /// <param name="msg"></param>
    public static void ShowMessage(string msg, string title)
    {
        ShowMessage(msg, title, MessageBoxButton.OK);
    }

    /// <summary>
    /// 彈出提示消息
    /// </summary>
    /// <param name="msg"></param>
    public static void ShowMessage(string msg, string title, MessageBoxButton buttons)
    {
        MessageBox.Show(msg, title, buttons);
    }

    #endregion
}


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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品色蜜蜜精品视频在线观看| 动漫精品一区二区| 亚洲国产精品字幕| 欧美高清在线观看| 亚洲伊人第一页| 亚洲欧洲一区二区三区在线观看| 欧美性xxxxx极品| 亚洲色图在线观看| 国产一区二区三区在线免费观看| 日韩电影在线观看免费| 精品国产美女在线| 欧美性jizz18性欧美| 亚洲综合最新在线| 成人欧美一区二区三区黑人孕妇| 久久天天躁狠狠躁夜夜躁| 国产精品爽爽爽爽爽爽在线观看| 欧美精品免费在线观看| 国产噜噜噜噜噜久久久久久久久| 亚洲影院在线看| 国产亚洲精品久久久优势| 欧美裸体xxxx极品少妇软件| 欧美日韩国产精品专区| 久色乳综合思思在线视频| 国产成人精品日本亚洲专区61| 日韩成人av在线| 最新国产精品拍自在线播放| 95av在线视频| 中文字幕日韩精品有码视频| 精品国产欧美一区二区五十路| 日韩av手机在线观看| 欧美第一黄网免费网站| www.亚洲男人天堂| 日韩美女免费线视频| 欧美日本精品在线| 最新国产精品拍自在线播放| 亚洲黄色成人网| 午夜精品蜜臀一区二区三区免费| 国产黑人绿帽在线第一区| 亚洲天堂网在线观看| 国产精品黄页免费高清在线观看| 亚洲第一精品自拍| 亚洲福利视频在线| 国产一区二区视频在线观看| 久久久999精品视频| 国产亚洲欧美日韩精品| 中文字幕国产亚洲2019| 91欧美精品午夜性色福利在线| 91中文精品字幕在线视频| 欧美一级电影免费在线观看| 日本免费在线精品| 亚洲精品99999| 久久中文字幕在线| 久久综合88中文色鬼| 全色精品综合影院| 91老司机精品视频| 国产精品主播视频| 亚洲影院高清在线| 91精品久久久久久久久中文字幕| 欧美激情视频在线| 秋霞午夜一区二区| 91情侣偷在线精品国产| 91精品久久久久| 亚洲四色影视在线观看| 日本精品中文字幕| 日韩av网站在线| 欧美日韩精品二区| 欧美激情综合色综合啪啪五月| 亚洲精品一区二三区不卡| 96sao精品视频在线观看| 欧美精品中文字幕一区| 国产精品老女人精品视频| 精品视频偷偷看在线观看| 亚洲精品97久久| 中文字幕久久久av一区| 欧美成人在线影院| 一区二区三区视频观看| 川上优av一区二区线观看| 亚洲国产欧美一区二区三区久久| 久久久久久久久久久国产| 欧美精品videos另类日本| 欧美激情欧美激情| 国产日韩欧美夫妻视频在线观看| 亚洲欧美日韩国产成人| 韩国三级电影久久久久久| 热久久免费视频精品| 热门国产精品亚洲第一区在线| 深夜精品寂寞黄网站在线观看| 国内精品一区二区三区| 久久久久久久色| 91精品视频大全| 成人免费视频97| 精品福利樱桃av导航| 91精品国产一区| 国产精品午夜国产小视频| 国产成人精彩在线视频九色| 91精品中国老女人| 精品国产一区二区三区四区在线观看| 亚洲激情在线视频| 欧美野外猛男的大粗鳮| 亚洲男人天堂网站| 亚洲91精品在线观看| 91精品国产91久久久久久| 狠狠色噜噜狠狠狠狠97| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品久久久久9999| 国产999精品视频| 最近2019年手机中文字幕| 欧美乱妇40p| 亚洲综合精品一区二区| 欧美情侣性视频| 亚洲国产精品99久久| 国产精品久久久久久久久久| 欧美日韩ab片| 欧美大尺度激情区在线播放| 这里只有精品在线观看| 欧美日韩国产91| 成人性教育视频在线观看| 色吧影院999| 国产欧洲精品视频| 国产免费成人av| 国产国语刺激对白av不卡| 国产欧美日韩精品丝袜高跟鞋| 4438全国成人免费| 国产成人avxxxxx在线看| 91av在线网站| 欧美尺度大的性做爰视频| 亚洲欧美激情精品一区二区| 最近2019中文字幕mv免费看| 亚洲专区在线视频| 精品久久久香蕉免费精品视频| 中文字幕视频在线免费欧美日韩综合在线看| 精品久久久久久久久久久久久久| 亚洲国产精品国自产拍av秋霞| 日韩中文字幕国产精品| 自拍偷拍亚洲在线| 日韩av片永久免费网站| 久久久久久一区二区三区| 精品视频在线播放色网色视频| 色一情一乱一区二区| 欧美电影免费观看电视剧大全| 欧美精品九九久久| 欧美野外猛男的大粗鳮| 中文字幕视频在线免费欧美日韩综合在线看| 日韩电影免费观看在线| 高清一区二区三区日本久| 精品福利在线看| 久久久久久久久久久成人| 都市激情亚洲色图| 欧美第一淫aaasss性| 国内精品视频在线| 日韩成人xxxx| 国产午夜一区二区| 欧美理论电影在线观看| 成人中文字幕在线观看| 精品久久久91| 亚洲人a成www在线影院| 亚洲国产成人精品电影| 欧美一区二区大胆人体摄影专业网站| 美女精品视频一区| 97久久国产精品| 亚洲成人a级网| 欧美性xxxxx极品娇小| 欧美做爰性生交视频| 俺去亚洲欧洲欧美日韩|