在WPF中,有没有办法在后面的代码中获取故事板动画值的当前值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在WPF中,有没有办法在后面的代码中获取故事板动画值的当前值?相关的知识,希望对你有一定的参考价值。
我把故事板动画定义为资源。我使用 StoryBoard.Begin
方法中获取故事板动画(双动画)的当前值。我想在后面的代码中获取故事板动画(双动画)的当前值,我试过使用Changed事件,但似乎没有意义,如何在后面的代码中获取双动画的插值、当前值?
我想要的和这个问题中类似。获取双动画的当前值
这是启动动画的代码。
protected override void OnMouseEnter(MouseEventArgs e)
{
speedLine = Template.FindName(speedLineName, this) as Line;
var std = speedLine.Resources["std"] as Storyboard;
var doubleAnim = std.Children[0] as DoubleAnimation;
doubleAnim.From = 220;
doubleAnim.Changed += DoubleAnim_Changed;
doubleAnim.To = MaxSpeed;
std.Begin();
base.OnMouseEnter(e);
}
这是相关的XAML文件
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:Speedometar}">
<Grid Background="{TemplateBinding Background}" x:Name="RootGrid">
<Ellipse x:Name="PART_OuterElipse" Fill="LightGray" Width="220" Height="220" />
<Ellipse Fill="Gray" Width="200" Height="200" />
<Line x:Name="PART_SpeedLine" Stroke="Red" Width="200" StrokeThickness="2" Panel.ZIndex="1" X1="100" Y1="10" X2="100" Y2="100">
<Line.RenderTransform>
<RotateTransform Angle="220" CenterX="100" CenterY="100" />
</Line.RenderTransform>
<Line.Resources>
<Storyboard x:Key="std">
<DoubleAnimation
Storyboard.TargetName="PART_SpeedLine"
Storyboard.TargetProperty="(Line.RenderTransform).(RotateTransform.Angle)"
Duration="0:0:1"
To="{StaticResource AngleResource}">
<DoubleAnimation.EasingFunction >
<CircleEase></CircleEase>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
</Line.Resources>
</Line>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案
你可以通过使用以下方法获取正在播放动画的依赖属性的当前值 DependencyPropertyDescriptor
:
RotateTransform rotateTransform = speedLine.RenderTransform as RotateTransform;
DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor
.FromProperty(RotateTransform.AngleProperty, typeof(RotateTransform));
if (dpd != null)
{
dpd.AddValueChanged(rotateTransform, new EventHandler((ss, ee) =>
{
Debug.WriteLine("Current value is " + rotateTransform.Angle.ToString());
}));
}
以上是关于在WPF中,有没有办法在后面的代码中获取故事板动画值的当前值?的主要内容,如果未能解决你的问题,请参考以下文章