最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2013年05月13日 18:09:50   作者:  
本篇文章是對打造自動消失的對話框進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

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

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

復(fù)制代碼 代碼如下:

<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頁面,代碼如下:

復(fù)制代碼 代碼如下:

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

后臺cs代碼為:
復(fù)制代碼 代碼如下:

private void ShowPopup_Clicked(object sender, RoutedEventArgs e)
        {
            Popup popup = new Popup();

            //設(shè)置popup的Child屬性為自定義的用戶控件。
             popup.Child = new PopupBorder();
            popup.IsOpen = true;
        }


復(fù)制代碼 代碼如下:

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);
            };

完整的代碼如下:
復(fù)制代碼 代碼如下:

PopupBorder pborder = new PopupBorder();

Popup popUp = new Popup();

//設(shè)置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;


運行可以發(fā)現(xiàn)彈出的消息已經(jīng)居中了,那么如何讓它自動消失呢??,

要想自動消失還得使用定時器,過了一段時間后定時器將popUp控件的 IsOpen屬性設(shè)置為false,這樣窗口就關(guān)閉了。

于是在LayoutUpdated中增加定時器代碼:

復(fù)制代碼 代碼如下:

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設(shè)置為false。

運行可以發(fā)現(xiàn)窗口可以自動消失了。

 

可以看到彈出窗口一下就關(guān)閉了,那么能不能慢慢的漸變的消失呢??

為了實現(xiàn)漸變的消失,那么就應(yīng)該使用動畫了。

首先在PopupBorder中增加

復(fù)制代碼 代碼如下:

<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>

當(dāng)然上面的PopupBorder代碼中已經(jīng)有了這段代碼了,動畫使用了DoubleAnimation,設(shè)置LayoutRoot 對象的Opacity屬性在1秒的時間內(nèi)從1,變到0。

接著在PopupDemo頁面的按鈕事件里面在popUp.Child = pborder;后面增加如下代碼來執(zhí)行動畫:

復(fù)制代碼 代碼如下:

//設(shè)置popup的Child屬性為自定義的用戶控件。
popUp.Child = pborder;

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


然后將Clicked中的代碼進(jìn)行重構(gòu)。

新建MessageBoxHelper類:

代碼如下:

復(fù)制代碼 代碼如下:

public class MessageBoxHelper
{
    #region 提示消?息¡é

    /// <summary>
    /// 彈出提示消息標(biāo)題為提示,按鈕為確定
    /// </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控件。

相關(guān)文章

  • C#實現(xiàn)凍結(jié)Excel窗口以鎖定行列或解除凍結(jié)

    C#實現(xiàn)凍結(jié)Excel窗口以鎖定行列或解除凍結(jié)

    在處理大型Excel工作簿時,有時候我們需要在工作表中凍結(jié)窗格,這樣可以在滾動查看數(shù)據(jù)的同時保持某些行或列固定不動,下面我們就來看看如何使用C#實現(xiàn)凍結(jié)Excel窗口吧
    2024-04-04
  • C#中的Linq Intersect與Except方法使用實例

    C#中的Linq Intersect與Except方法使用實例

    這篇文章主要介紹了C#中的Linq Intersect與Except方法使用實例,本文直接給出示例代碼,需要的朋友可以參考下
    2015-06-06
  • Unity打包代碼到DLL的實現(xiàn)

    Unity打包代碼到DLL的實現(xiàn)

    本文主要介紹了Unity打包代碼到DLL的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • C#實現(xiàn)動態(tài)圖標(biāo)閃爍顯示的示例代碼

    C#實現(xiàn)動態(tài)圖標(biāo)閃爍顯示的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實現(xiàn)動態(tài)圖標(biāo)閃爍顯示的功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • C#的FileSystemWatcher用法實例詳解

    C#的FileSystemWatcher用法實例詳解

    這篇文章主要介紹了C#的FileSystemWatcher用法,以實例形似詳細(xì)分析了FileSystemWatcher控件主要功能,并總結(jié)了FileSystemWatcher控件使用的技巧,需要的朋友可以參考下
    2014-11-11
  • Unity Shader實現(xiàn)序列幀動畫效果

    Unity Shader實現(xiàn)序列幀動畫效果

    這篇文章主要為大家詳細(xì)介紹了Unity Shader實現(xiàn)序列幀動畫效果 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 直接在線預(yù)覽Word、Excel、TXT文件之ASP.NET

    直接在線預(yù)覽Word、Excel、TXT文件之ASP.NET

    這篇文章主要用asp.net技術(shù)實現(xiàn)直接在線預(yù)覽word、excel、txt文件,有需要的朋友可以參考下
    2015-08-08
  • 深入理解C# 委托與事件

    深入理解C# 委托與事件

    本文主要介紹了深入理解C# 委托與事件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2008-05-05
  • 基于不要返回null之EmptyFactory的應(yīng)用詳解

    基于不要返回null之EmptyFactory的應(yīng)用詳解

    本篇文章對不要返回null之EmptyFactory進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#實現(xiàn)人臉識別超簡單方法舉例

    C#實現(xiàn)人臉識別超簡單方法舉例

    這篇文章主要給大家介紹了關(guān)于C#實現(xiàn)人臉識別的相關(guān)資料,文中講解了在C#中使用EmguCV庫進(jìn)行人臉識別的簡單示例,包括安裝EmguCV庫、準(zhǔn)備訓(xùn)練數(shù)據(jù)、編寫代碼和運行程序,需要的朋友可以參考下
    2024-11-11

最新評論

安岳县| 邵阳市| 富源县| 莎车县| 屯门区| 密云县| 兰州市| 正镶白旗| 荃湾区| 合川市| 邛崃市| 邵东县| 泸溪县| 佛山市| 濮阳市| 新丰县| 丽水市| 尉氏县| 中江县| 临猗县| 施甸县| 平邑县| 木兰县| 河源市| 淮滨县| 盘山县| 平南县| 商丘市| 忻城县| 霍州市| 济阳县| 志丹县| 巴彦县| 高邮市| 西宁市| 安新县| 台安县| 库伦旗| 郯城县| 朝阳市| 商都县|