< DoubleAnimationUsingKeyFrames BeginTime ="00:00:00" Storyboard.Targetname ="border"
Storyboard.TargetProperty ="(UIElement.Rendertransform).(transformGroup.Children)[3].(Translatetransform.Y)" >
< EasingDoubleKeyFrame KeyTime ="00:00:00" Value ="-296" />
< EasingDoubleKeyFrame KeyTime ="00:00:01" Value ="0" />
</ DoubleAnimationUsingKeyFrames >
< DoubleAnimationUsingKeyFrames BeginTime ="00:00:00" Storyboard.Targetname ="border"
Storyboard.TargetProperty ="(UIElement.Opacity)" >
< EasingDoubleKeyFrame KeyTime ="00:00:00" Value ="0.3" />
< EasingDoubleKeyFrame KeyTime ="00:00:01" Value ="1" />
</ DoubleAnimationUsingKeyFrames >
< ObjectAnimationUsingKeyFrames BeginTime ="00:00:00" Storyboard.Targetname ="border"
Storyboard.TargetProperty ="(UIElement.Visibility)" >
< discreteObjectKeyFrame KeyTime ="00:00:00" >
< discreteObjectKeyFrame.Value >
< Visibility > Visible </ Visibility >
</ discreteObjectKeyFrame.Value >
</ discreteObjectKeyFrame >
< discreteObjectKeyFrame KeyTime ="00:00:01" >
< discreteObjectKeyFrame.Value >
< Visibility > Visible </ Visibility >
</ discreteObjectKeyFrame.Value >
</ discreteObjectKeyFrame >
</ ObjectAnimationUsingKeyFrames >
</ Storyboard > 以上的整个动画实现采用的是border的位置变换实现的,接下来要介绍的就是如何通过视图状态管理(Visual State Manager)去实现和上面同样的功能。首先将界面设计为如下图所示界面,border不透明度为30%,默认Y的位置为-298。 接下来就是进行状态的设计了,可以通过“窗口”菜单下的“状态”选项打开状态管理框,首先添加状态组,然后再状态组下添加两个状态,分别命名为In和Out。如下截图: “In”状态用于完成面板从外动态的进入主界面,实际上也就是完成一个位置变换动画,详细如下截图所示: “Out”状态与“In”状态相反,用于完成面板从主界面以动画的形式推出主界面,详细设计图下截图所示: 在整个进入和退出的动画状态中,为了增强用户体验以及达到更好的效果,我还特增加了模糊到透明的动画处理。最终生成的状态代码如下: < visualstatemanager.VisualStateGroups >
< VisualStateGroup x:name ="VisualStateGroup" >
< VisualState x:name ="In" >
< Storyboard >
< ObjectAnimationUsingKeyFrames BeginTime ="00:00:00" Duration ="00:00:00.0010000" Storyboard.Targetname ="border"
Storyboard.TargetProperty ="(UIElement.Visibility)" >
< discreteObjectKeyFrame KeyTime ="00:00:00" >
< discreteObjectKeyFrame.Value >
< Visibility > Visible </ Visibility >
</ discreteObjectKeyFrame.Value >
</ discreteObjectKeyFrame >
</ ObjectAnimationUsingKeyFrames >
< DoubleAnimationUsingKeyFrames BeginTime ="00:00:00" Storyboard.Targetname ="border"
Storyboard.TargetProperty ="(UIElement.Rendertransform).(transformGroup.Children)[3].(Translatetransform.Y)" >
< EasingDoubleKeyFrame KeyTime ="00:00:00" Value ="-296" />
< EasingDoubleKeyFrame KeyTime ="00:00:01" Value ="0" />
</ DoubleAnimationUsingKeyFrames >
< DoubleAnimationUsingKeyFrames BeginTime ="00:00:00" Storyboard.Targetname ="border"
Storyboard.TargetProperty ="(UIElement.Opacity)" >
< EasingDoubleKeyFrame KeyTime ="00:00:00" Value ="0.3" />
< EasingDoubleKeyFrame KeyTime ="00:00:01" Value ="1" />
</ DoubleAnimationUsingKeyFrames >
</ Storyboard >
</ VisualState >
< VisualState x:name ="Out" >
< Storyboard >
< ObjectAnimationUsingKeyFrames BeginTime ="00:00:00" Duration ="00:00:00.0010000" Storyboard.Targetname ="border"
Storyboard.TargetProperty ="(UIElement.Visibility)" >
< discreteObjectKeyFrame KeyTime ="00:00:00" >
< discreteObjectKeyFrame.Value >
< Visibility > Visible </ Visibility >
</ discreteObjectKeyFrame.Value >
</ discreteObjectKeyFrame >
</ ObjectAnimationUsingKeyFrames >
< DoubleAnimationUsingKeyFrames BeginTime ="00:00:00" Storyboard.Targetname ="border"
Storyboard.TargetProperty ="(UIElement.Rendertransform).(transformGroup.Children)[3].(Translatetransform.Y)" >
< EasingDoubleKeyFrame KeyTime ="00:00:00" Value ="0" />
< EasingDoubleKeyFrame KeyTime ="00:00:01" Value ="-298" />
</ DoubleAnimationUsingKeyFrames >
< DoubleAnimationUsingKeyFrames BeginTime ="00:00:00" Storyboard.Targetname ="border"
Storyboard.TargetProperty ="(UIElement.Opacity)" >
< EasingDoubleKeyFrame KeyTime ="00:00:00" Value ="1" />
< EasingDoubleKeyFrame KeyTime ="00:00:01" Value ="0.3" />
</ DoubleAnimationUsingKeyFrames >
</ Storyboard >
</ VisualState >
</ VisualStateGroup >
</ visualstatemanager.VisualStateGroups > 完整的视图状态管理代码如上代码块,要进行状态间的切换可以通过visualstatemanager.GoToState()方法实现,如下代码块实现了进入与退出的状态切换: private voID onInClick( object sender, System.windows.RoutedEventArgs e)
{
visualstatemanager.GoToState( this , " In " , false );
}
private voID onOutClick( object sender, " Out " , false );
} 本篇中的示例可通过篇末提供的下载链接下载示例源代码,本篇只是简单的介绍了视图状态管理与动画结合的应用,关于视图状态管理的详细内容请大家查看相关资料进行学习,下面提供一些有帮助的文章链接。 推荐资源: Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM) Silverlight & Blend动画设计系列文章 MSDN: http://msdn.microsoft.com/zh-cn/library/cc189090(VS.95).aspx http://www.silverlight.net/learn/quickstarts/animations/ 总结
以上是内存溢出为你收集整理的Silverlight & Blend动画设计系列九:动画(Animation)与视图状态管理(Visual State Manager)全部内容,希望文章能够帮你解决Silverlight & Blend动画设计系列九:动画(Animation)与视图状态管理(Visual State Manager)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)