天天看點

wpf實作仿qq消息提示框

原文:

wpf實作仿qq消息提示框

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/huangli321456/article/details/50523144

1、實作步驟

1.1 另起一個視窗作為消息提示的視窗,在主窗體中調用,先處理一下消息框的展示問題, AllowsTransparency="True"  WindowStyle="None" WindowStartupLocation="Manual",實作允許透明,隐藏自帶的工具條(關閉、最大/最小化),自定義視窗位置。

1.2 修改窗體的展示位置為右下角

1.3 通過漸入動畫展示窗體,通過定時器自動關閉消息框,關閉時通過漸出動畫關閉窗體。

2、關鍵代碼:

漸出動畫:

<Window.Resources>

        <Storyboard x:Key="ClosedStoryboard" Storyboard.TargetName="mGrid">

            <DoubleAnimation From="0" To="1" Duration="0:0:0.2" Storyboard.TargetProperty="OpacityMask.(GradientBrush.GradientStops)[1].Offset"/>

            <DoubleAnimation From="0" To="1" Duration="0:0:0" BeginTime="0:0:0.2" Storyboard.TargetProperty="OpacityMask.(GradientBrush.GradientStops)[2].Offset"/>

            <ColorAnimation To="#00000000" Duration="0" Storyboard.TargetProperty="OpacityMask.(GradientBrush.GradientStops)[2].Color"/>

        </Storyboard>

        <LinearGradientBrush x:Key="ClosedBrush" StartPoint="0.5,0" EndPoint="0.5,1">

            <GradientStop Color="#FF000000" Offset="1"/>

            <GradientStop Color="#FF000000" Offset="0"/>

        </LinearGradientBrush>

    </Window.Resources>

添加遮罩層:

<Grid.OpacityMask>

            <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">

                <GradientStop Color="#00000000" Offset="0"/>

                <GradientStop Color="#00000000" Offset="1"/>

            </LinearGradientBrush>

        </Grid.OpacityMask>

添加觸發器,窗體加載完後啟動漸入動畫:

<Grid.Triggers>

            <EventTrigger RoutedEvent="Window.Loaded">

                <EventTrigger.Actions>

                    <BeginStoryboard>

                        <Storyboard>

                            <DoubleAnimation From="1" To="0" Duration="0:0:0.2" Storyboard.TargetProperty="OpacityMask.(GradientBrush.GradientStops)[1].Offset"/>

                            <DoubleAnimation From="1" To="0" Duration="0:0:0" BeginTime="0:0:0.2" Storyboard.TargetProperty="OpacityMask.(GradientBrush.GradientStops)[2].Offset"/>

                            <ColorAnimation To="#FF000000" Duration="0" Storyboard.TargetProperty="OpacityMask.(GradientBrush.GradientStops)[2].Color"/>

                        </Storyboard>

                    </BeginStoryboard>

                </EventTrigger.Actions>

            </EventTrigger>

        </Grid.Triggers>

關閉提示框是先啟動漸出動畫,再關閉窗體:

this.IsEnabled = false;

            mGrid.OpacityMask = this.Resources["ClosedBrush"] as LinearGradientBrush;

            Storyboard std = this.Resources["ClosedStoryboard"] as Storyboard;

            std.Completed += delegate { this.Close(); };

            std.Begin();

源碼下載下傳

效果:

wpf實作仿qq消息提示框