WP8,DoubleAnimation - "无法解析TargetName"例外

时间:2014-10-27 16:59:50

标签: c# windows-phone-8 windows-phone storyboard

我想在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的子项时则不会。

1 个答案:

答案 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中生成的,那会好得多。你会得到所有答案:)