我一直在搜索互联网和MSDN网站,试图围绕整个动画交易,我有点亏。我已经看过一些例子,其中程序员会将所有动画业务编写到代码隐藏文件中,并使XAML代码相对简单。另一方面,我已经看到了相反的情况,很少有人会介意你,但我已经看过了。我试图弄清楚何时应该使用代码隐藏代码而不是使用XAML。要添加到该问题,请考虑这一点。
学习Storyboard及其类似内部阴谋的最大障碍是GetValue() - esque方法和深层绑定原则。除非你拥有完美的加密技能或出色的识别天赋(我正在看着你,MSDN!),否则很多网站都无法帮助我们全面了解这些概念。因此,对于那些仍在磨练这些技能的人(即我),我需要一些参考资料,这些参考资料能够让我有一个细致入微的理解,这样我就可以自己动手了。过去的东西
"{Binding Path=Text}"
或类似的东西(虽然,这也没有完全解释。它们对微妙的东西有点掩饰)。我需要像
这样的东西 "{Binding Path=(UIElement.Something.SomethingElse).(Property)}"
详细说明。例如:为什么他们使用括号?我只应该在绑定括号中使用一级点引用吗?我可以在括号内做限制吗?等
请将它应用于此示例:在XAML中,我目前有两个动画,两个动画在下面设置一个路径(...用于删除代码):
<Page x:Class="PhotoPage"
...
...
>
<Page.Resources>
<ResourceDictionary>
<Storyboard x:Key="RAnim_P1_2">
<DoubleAnimation x:Name="X"
Storyboard.TargetName="ReactorP1_2SclX"
Storyboard.TargetProperty="ScaleX"
Duration="0:0:2" From="1.0" To="15.0"
/>
<DoubleAnimation x:Name="Y"
Storyboard.TargetName="ReactorP1_2SclX"
Storyboard.TargetProperty="ScaleY"
Duration="0:0:2" From="1.0" To="15.0"
/>
</Storyboard>
<Storyboard x:Key="RAnim_P1_22">
<DoubleAnimation x:Name="BX"
Storyboard.TargetName="ReactorP1_2SclX"
Storyboard.TargetProperty="ScaleX"
Duration="0:0:2" From="15.0" To="1.0"
/>
<DoubleAnimation x:Name="BY"
Storyboard.TargetName="ReactorP1_2SclX"
Storyboard.TargetProperty="ScaleY"
Duration="0:0:2" From="15.0" To="1.0"
/>
</Storyboard>
</ResourceDictionary>
</Page.Resources>
...
...
<Viewbox Grid.Row="1">
<Grid>
<Path x:Name="ReactorP1_2"
Data="F0 M 0,0 C 0,1.44 0,3.52 0,4.8 -0.96,4.8 -1.92,4.8 -2.4,4.8
...
..."
Fill="#ffff0000" Stretch="Fill"
Canvas.Left="164.609" Canvas.Top="44.15" HorizontalAlignment="Center"
VerticalAlignment="Center">
<Path.RenderTransform>
<ScaleTransform x:Name="ReactorP1_2SclX" ScaleX="1.0" ScaleY="1.0"/>
</Path.RenderTransform>
</Path>
</Grid>
</Viewbox>
</Grid>
</Page>
在我的相关代码隐藏文件中,我有这个:
Imports System.Windows.Media.Animation
Class PhotoPage
Dim NR_Running As Boolean = False
Private Sub ToggleScale_Click(sender As Object, e As RoutedEventArgs) Handles AnimateNR.Click
NR_Running = Not NR_Running
Dim strybrd1 As New Storyboard()
strybrd1 = Me.Resources("RAnim_P1_2")
Dim strybrd2 As New Storyboard()
strybrd2 = Me.Resources("RAnim_P1_22")
Dim anim1 = strybrd1.Children("X")
If strybrd1 IsNot Nothing Then
If strybrd2 IsNot Nothing Then
If NR_Running Then
strybrd1.Begin()
Else
strybrd2.Begin()
End If
End If
End If
End Sub
End Class
此代码应该在单击页面中的按钮时使路径大小增加。这样可行。当您再次单击该按钮时,它还会使路径缩小。但是,我想要一些额外的东西。当我在按钮生长的过程中单击按钮时,我希望动画能够在正确的位置转动并开始缩小,反之亦然。目前,当我在动画期间单击时,它将跳到当前正在运行的动画的结尾,然后开始缩小,使形状&#34;弹出&#34;,可以这么说,而不是从平滑过渡到越来越萎缩。我希望它顺利。
我看到这个工作的方式是访问故事板中的动画,将新动画的To
设置为正在运行的动画的From
,然后设置TargetProperty
正在运行的动画的值到新的From
。然后,将新Duration
设置为&#34;基本持续时间&#34;之间的差值。和#34;当前时间&#34;正在运行的。然后让新的运行。但是,我不知道如何从代码隐藏中访问动画,这需要发生,因为这一切都是通过点击按钮来运行的。
一旦得到帮助,我应该能够知道如何使用StoryBoard类的GetValue()方法来获取其Animation子元素的属性,以及能够将一些TextBlock
绑定到那些动画属性,我就可以看到它们是否实时更新。
对不起,这是如此啰嗦,但我已经为此工作了两天,而且我无法如何使这个查询简洁明了。我不确定我是否能很好地解释它。有人可以帮我这个吗?