无法在Storyboard中为TranslateTransform的Y属性设置动画

时间:2017-03-01 17:02:28

标签: c# wpf animation

我试图让Canvas上下移动,这应该是一项简单的任务,但我不知道怎么做:

<Window.Resources>
    <TranslateTransform x:Key="transform1" x:Name="testTransform" X="-24" Y="0" />
    <Storyboard x:Key="storyboard1">
        <DoubleAnimation Duration="0:0:0.4" Storyboard.TargetName="testTransform" Storyboard.TargetProperty="Y" By="6"
            AutoReverse="True" RepeatBehavior="Forever" EasingFunction="{StaticResource ease1}" />
    </Storyboard>
</Window.Resources>
<Window.Triggers>
    <EventTrigger RoutedEvent="Loaded">
        <BeginStoryboard Storyboard="{StaticResource storyboard1}" />
    </EventTrigger>
</Window.Triggers>
[...]
<Canvas x:Name="canvas1" RenderTransform="{StaticResource transform1}">
    <Path Data="{StaticResource amazingPath}" />
</Canvas>

我得到了这个:

,而不是为Canvas平滑地制作动画
  

未处理的类型&#39; System.InvalidOperationException&#39;发生在PresentationFramework.dll

中      

其他信息:&#39; testTransform&#39;名称无法在&#39; TestProject.MainWindow&#39;的名称范围内找到。

这里发生了什么?

2 个答案:

答案 0 :(得分:1)

Storyboard.TargetName属性设置为应用Canvas的元素(TranslateTransform)的名称。

这有效:

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        mc:Ignorable="d"
        Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <TranslateTransform x:Key="transform1" x:Name="testTransform" X="-24" Y="0" />
        <Storyboard x:Key="storyboard1">
            <DoubleAnimation Duration="0:0:0.4" Storyboard.TargetName="canvas1" 
                             Storyboard.TargetProperty="RenderTransform.Y" By="6" AutoReverse="True" RepeatBehavior="Forever" />
        </Storyboard>
    </Window.Resources>
    <Window.Triggers>
        <EventTrigger RoutedEvent="Loaded">
            <BeginStoryboard Storyboard="{StaticResource storyboard1}" />
        </EventTrigger>
    </Window.Triggers>
    <Canvas x:Name="canvas1" RenderTransform="{StaticResource transform1}">
        <TextBlock>...</TextBlock>
    </Canvas>
</Window>

答案 1 :(得分:1)

如果您设置Storyboard.Target="{StaticResource transform1}"并且将EventTrigger放在窗口Style中,则此方法有效:

<Window.Resources>
    <TranslateTransform x:Key="transform1" X="-24" Y="0" />
    <Storyboard x:Key="storyboard1">
        <DoubleAnimation
            Duration="0:0:0.4"
            Storyboard.Target="{StaticResource transform1}"
            Storyboard.TargetProperty="Y" By="6"
            AutoReverse="True" RepeatBehavior="Forever" />
    </Storyboard>
</Window.Resources>
<Window.Style>
    <Style TargetType="Window">
        <Style.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard Storyboard="{StaticResource storyboard1}" />
            </EventTrigger>
        </Style.Triggers>
    </Style>
</Window.Style>
<Canvas RenderTransform="{StaticResource transform1}">
    ...
</Canvas>
相关问题