WPF实现渐变淡入淡出的动画效果

摘要:
您可以使元素的特定区域透明或部分透明,以实现新颖的效果。

1、实现原理

1.1 利用UIElement.OpacityMask属性,用于改变对象区域的不透明度的画笔。可以使元素的特定区域透明或部分透明,从而实现比较新颖的效果。

1.2 OpacityMask属性接受任何画刷,可利用LinearGradientBrush线性渐变画刷,通过对渐变画刷中各颜色点加以动画处理即可。

2、渐变淡入实现

渐变淡入效果,可通过事件触发器触发Loaded事件实现,所以可以仅用前端XAML语言实现。

2.1 设置对象的OpacityMask属性

<Grid.OpacityMask>
    <LinearGradientBrush StartPoint="0.5,1" EndPoint="0.5,0">
        <GradientStop Color="#00000000" Offset="0"/>
        <GradientStop Color="#00000000" Offset="1"/>
        <GradientStop Color="#00000000" Offset="1"/>
    </LinearGradientBrush>
</Grid.OpacityMask>

2.2 设置对象的事件触发器

<Grid.Triggers>
    <EventTrigger RoutedEvent="Loaded">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation From="1" To="0" Duration="0:0:1.5" Storyboard.TargetProperty="OpacityMask.(GradientBrush.GradientStops)[1].Offset"/>
                    <DoubleAnimation From="1" To="0" Duration="0:0:1" BeginTime="0:0:0.5" 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>

3、渐变淡出实现

渐变淡出效果,由于事件触发器事件需要路由事件触发,所以需要使用后端代码实现。

3.1 准备渐变淡出的动画和画刷资源

<Window.Resources>
    <Storyboard x:Key="ClosedStoryboard" Storyboard.TargetName="LoginGrid">
        <DoubleAnimation From="1" To="0" Duration="0:0:2" Storyboard.TargetProperty="OpacityMask.(GradientBrush.GradientStops)[1].Offset"/>
        <DoubleAnimation From="1" To="0" Duration="0:0:1.5" BeginTime="0:0:0.5"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="0"/>
        <GradientStop Color="#FF000000" Offset="1"/>
        <GradientStop Color="#FF000000" Offset="1"/>
    </LinearGradientBrush>
</Window.Resources>

3.2 后端通过绑定按钮的Click事件实现

private void btnCancel_Click(object sender, RoutedEventArgs e)
{
    this.IsEnabled = false;

    LoginGrid.OpacityMask = this.Resources["ClosedBrush"] as LinearGradientBrush;
    Storyboard std = this.Resources["ClosedStoryboard"] as Storyboard;
    std.Completed += delegate { this.Close(); };

    std.Begin();
}

4、运行效果

4.1 效果图如下

 WPF实现渐变淡入淡出的动画效果第1张

欢迎转载,但请注明出处:http://www.cnblogs.com/julyweb/,谢谢!

免责声明:文章转载自《WPF实现渐变淡入淡出的动画效果》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux下共享热点抓包LINQ 和泛型类型下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF实现消息提醒(广告弹窗)

1.先上效果图: 2.1t提示框界面。 主窗口界面没什么内容,就放了一个触发按钮。先绘制通知窗口(一个关闭按钮,俩个文本控件),可以设置下ResizeMode="NoResize" WindowStyle="None"   Topmost="True", 去掉窗口标题,并使提示窗口始终处于最上层。 <Border BorderThickness="...

【转】编写高质量代码改善C#程序的157个建议——建议87:区分WPF和WinForm的线程模型

建议87:区分WPF和WinForm的线程模型WPF和WinForm窗体应用程序都有一个要求,那就是UI元素(如Button、TextBox等)必须由创建它的那个线程进行更新。WinForm在这方面的限制并不是很严格,所以像下面这样的代码,在WinForm中大部分情况下还能运行(本建议后面会详细解释为什么会出现这种现象): private void but...

WPF 基础学习笔记

学习笔记: WPF中对于控件名字的命名,可在code中找到,例如如下:x:Name=“MassText” ... 如何获取WPF richTextBox的text?有别于winform,比较复杂。 string richText1 = new TextRange(RichTextBox1.Document.ContentStart, RichTextBo...

WPF知识点全攻略11- 命令(Command)

先看一下命令的简单使用: <Window.CommandBindings> <CommandBinding Command="ApplicationCommands.Cut" CanExecute="CutCommand_CanExecute" Executed="CutCommand_Executed" />...

WPF的依赖属性

一、什么是依赖属性 依赖属性就是一种自己可以没有值,并且可以通过绑定从其他数据源获取值。依赖属性可支持WPF中的样式设置、数据绑定、继承、动画及默认值。 将所有的属性都设置为依赖属性并不总是正确的解决方案,具体取决于其应用场景。有时,使用私有字段实现属性的典型方法便能满足要求。MSDN中给出了下面几种应用依赖属性的场景: 1. 希望可在样式中设置属性。 2...

贫民窟里的WPF系列讲座(一)

最近讲了一套完整的WPF课程,感觉教学效果还很不错。我准备给MSDN录15期左右的事情,这几篇文章是配合视频一起来看的。我相信大家都是很喜欢研究新技术的,但是研究新技术的时候会遇到很多困难,譬如书籍的选择,工具的选择,环境的配置等等很多很多问题。 这里我结合自己学习的历程,分享一下。这里我说一下我当时学习的硬件条件,由于我的笔记本是IBM的T40,CPU是...