用C++代码中实现WPF动画 -- Opacity Animation
很多人都习惯使用Blend来帮助编辑XAML文件,生成很多动画。但在实际开发中,用代码来实现动画还是很实用的,而且代码的逻辑开发能力更强,更容易控制,这方面C#的例子已经很多了,下面我介绍几个C++的例子。
首先介绍少渐隐渐现,也就是Alpha Animation。代码如下
/**/
/*
* Take Label for example
*/
// 1, Find the lable by its name, The name define in the xaml file
Label ^ pColorLabel = (Label ^ )page -> FindName( " ColorAnimationLabel " );
// 2, Define a DoubleAnimation object
DoubleAnimation ^ pDoubleAnimation = gcnew DoubleAnimation();
// 3, Set from to and duration
pDoubleAnimation -> From = 1 ;
pDoubleAnimation -> To = 0 ;
pDoubleAnimation -> Duration = Duration(TimeSpan::FromSeconds( 3 ));
// 4, Create a storyboard(Timeline)
Storyboard ^ pStoryboard = gcnew Storyboard();
// 5, Set the DoubleAnimation's target name
pStoryboard -> SetTargetName(pDoubleAnimation, _T( " ColorAnimationLabel " ));
// 6, Set the DoubleAnimation's property
pStoryboard -> SetTargetProperty(pDoubleAnimation, gcnew PropertyPath(Label::OpacityProperty));
// 7, Add the DoubleAnimation object to the storyboard
pStoryboard -> Children -> Add(pDoubleAnimation);
// 8, Start the animation
pStoryboard -> Begin(pColorLabel);
* Take Label for example
*/
// 1, Find the lable by its name, The name define in the xaml file
Label ^ pColorLabel = (Label ^ )page -> FindName( " ColorAnimationLabel " );
// 2, Define a DoubleAnimation object
DoubleAnimation ^ pDoubleAnimation = gcnew DoubleAnimation();
// 3, Set from to and duration
pDoubleAnimation -> From = 1 ;
pDoubleAnimation -> To = 0 ;
pDoubleAnimation -> Duration = Duration(TimeSpan::FromSeconds( 3 ));
// 4, Create a storyboard(Timeline)
Storyboard ^ pStoryboard = gcnew Storyboard();
// 5, Set the DoubleAnimation's target name
pStoryboard -> SetTargetName(pDoubleAnimation, _T( " ColorAnimationLabel " ));
// 6, Set the DoubleAnimation's property
pStoryboard -> SetTargetProperty(pDoubleAnimation, gcnew PropertyPath(Label::OpacityProperty));
// 7, Add the DoubleAnimation object to the storyboard
pStoryboard -> Children -> Add(pDoubleAnimation);
// 8, Start the animation
pStoryboard -> Begin(pColorLabel);
上面代码所用的XAML如下
<
Page
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
>
< Grid >
< DockPanel >
< Button Name ="ColorAnmationButton" Width ="100" Height ="50" Background ="LightBlue" > Color Anmation </ Button >
< Label Name ="ColorAnimationLabel" Width ="200" Height ="50" Background ="Red" >
</ Label >
</ DockPanel >
</ Grid >
</ Page >
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
>
< Grid >
< DockPanel >
< Button Name ="ColorAnmationButton" Width ="100" Height ="50" Background ="LightBlue" > Color Anmation </ Button >
< Label Name ="ColorAnimationLabel" Width ="200" Height ="50" Background ="Red" >
</ Label >
</ DockPanel >
</ Grid >
</ Page >