我想在WP8应用程序中创建选框效果。 为实现这一目标,我将 StackPanel 放在 ScrollViewer 中,并尝试在 TranslateTransform.X 属性中使用 DoubleAnimation 。
代码:
<phone:PhoneApplicationPage.Resources>
<Storyboard x:Name="Scroll" RepeatBehavior="Forever" AutoReverse="True">
<DoubleAnimation From="0" To="100" Storyboard.TargetName="transform" Storyboard.TargetProperty="X" Duration="0:0:5" />
</Storyboard>
</phone:PhoneApplicationPage.Resources>
<Grid x:Name="LayoutRoot">
...
<ScrollViewer Height="80" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Hidden">
<StackPanel Orientation="Horizontal">
<StackPanel.RenderTransform>
<TranslateTransform x:Name="transform" />
</StackPanel.RenderTransform>
<Image Source="/Assets/logo1.png"></Image>
<Image Source="/Assets/logo2.png"></Image>
<Image Source="/Assets/logo3.png"></Image>
<Image Source="/Assets/logo4.png"></Image>
<Image Source="/Assets/logo5.png"></Image>
</StackPanel>
</ScrollViewer>
</Grid>
不幸的是,当从页面已加载事件处理程序中的代码隐藏中调用 Scroll.Begin()时,我遇到异常: System.InvalidOperationException:无法解析TargetName变换
我做错了什么? 当我将StackPanel直接放在LayoutRoot中时,动画会运行,但当它是ScrollViewer的子项时则不会。
答案 0 :(得分:1)
我认为例外是解释性的。就像你在某些UI元素上应用storyboard一样,但是你的xaml中没有名为“transform”的元素将被应用到这个故事板。
所以这个属性Storyboard.TargetName
应该是必须转换的UI元素的名称。
在您的情况下,如果您只需要为StackPanel
提供一个名称MyStackPanel
,然后在故事板代码中将此名称替换为transform
。
<StackPanel Orientation="Horizontal" Name="MyStackPanel">
<StackPanel.RenderTransform>
<TranslateTransform x:Name="transform" />
</StackPanel.RenderTransform>
...
你的故事板应该以这种方式改变..
<phone:PhoneApplicationPage.Resources>
<Storyboard x:Name="Scroll" RepeatBehavior="Forever" AutoReverse="True">
<DoubleAnimation From="0" To="100" Storyboard.TargetName="MyStackPanel" Storyboard.TargetProperty="X" Duration="0:0:5" />
</Storyboard>
</phone:PhoneApplicationPage.Resources>
重要: - 如果你只是使用Blend制作一个简单的动画,然后看看动画代码是如何在页面Xaml中生成的,那会好得多。你会得到所有答案:)