最近在用Silverlight设计一个图片展示的动画,做平移时最早使用DoubleAnimationUsingKeyFrames,但发现超出屏幕的部分居然被截取了,很是郁闷,于是改用ObjectAnimationUsingKeyFrames,但其离散点方式让动画显得十分生硬,百思不得其解,十分困惑。
今天再次打开项目,无意中发现将XAML文件中根控件从Grid改为Canvas后,再次使用DoubleAnimationUsingKeyFrames,期望已久的动画效果出现了,好开心。记录下来,便于后者参考。
程序代码粘贴如下:
XAML
<Canvas x:Name="LayoutRoot" Background="Black" Cursor="Hand" MouseMove="OnMouseMove" MouseLeftButtonDown="OnMouseLeftButtonDown" MouseLeftButtonUp="OnMouseLeftButtonUp" KeyDown="OnKeyDown"> <StackPanel x:Name="imgScroll" Height="630" Margin="0" MinWidth="630" Cursor="Arrow"> <StackPanel.RenderTransform> <CompositeTransform> </CompositeTransform> </StackPanel.RenderTransform> <Grid x:Name="imgContainer" Margin="0" HorizontalAlignment="Left" VerticalAlignment="Center"> <Grid.RowDeFinitions> <RowDeFinition Height="10" /> <RowDeFinition Height="*" MinHeight="300" /> <!--<RowDeFinition Height="10" />--> <RowDeFinition Height="*" MinHeight="300"/> <RowDeFinition Height="10" /> </Grid.RowDeFinitions> </Grid> </StackPanel> </Canvas>
C#
DoubleAnimationUsingKeyFrames dakf=new DoubleAnimationUsingKeyFrames(); Storyboard storyBoard = new Storyboard(); Storyboard.SetTarget(dakf,element); Storyboard.SetTargetProperty(dakf,new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)")); EasingDoubleKeyFrame edkf=new EasingDoubleKeyFrame(); edkf.KeyTime=TimeSpan.FromSeconds(1); edkf.Value=OffsetX+ idis; dakf.KeyFrames.Add(edkf); OffsetX = idis; storyBoard.Children.Add(dakf); storyBoard.Begin();
几点便捷方法: 1、如果不知道如何在后台设计动画,可打开Blend,设计好相关动画后,将自动生成的XAML语句中相应部分转化为C#即可; 2、设置类似Storyboard.SetTargetProperty(dakf,new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));语句,出现无法解析的错误是,考虑在对应的XAML语句中添加RenderTransform、CompositeTransform即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。