【问题标题】:WP8, DoubleAnimation - "Cannot resolve TargetName" exceptionWP8,DoubleAnimation - “无法解析 TargetName”异常
【发布时间】:2014-12-22 22:34:43
【问题描述】:

我想在 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>

不幸的是,当从页面 Loaded 事件处理程序中的代码隐藏调用 Scroll.Begin() 时,我遇到了异常:System.InvalidOperationException:无法解析 TargetName变换

我做错了什么? 当我将 StackPanel 直接放在 LayoutRoot 中时动画会运行,但当它是 ScrollViewer 的子级时不会运行。

【问题讨论】:

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


    【解决方案1】:

    我认为例外是解释性的。就像您在某些 UI 元素上应用故事板,但在您的 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中看看动画代码是如何生成的,那就更好了。你会得到你所有的答案:)

    【讨论】:

    • 您的代码不起作用,但感谢您指出我可以使用 Blend 来创建动画。它生成了工作代码:Storyboard.TargetName="MyStackPanel" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"。另外,我必须将 StackPanel 包装在 Grid 控件中
    • 我刚刚从头顶写了这个 :) @gumis 请用你的工作代码编辑我的 ans ..这样它就可以为其他人工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2011-12-28
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    相关资源
    最近更新 更多