我正在尝试使画布上下移动,这应该是一个简单的任务,但我以某种方式无法做到:
<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>
我明白了这一点:
,而不是平稳地动画。在presentationframework.dll
中出现了" system.invalidoperationException"类型的例外。附加信息:'testTransform'名称在'testproject.mainwindow'的名称范围中找不到。
这里是怎么回事?
如果您设置了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>
将Storyboard.TargetName
属性设置为应用TranslateTransform
的元素名称(Canvas
)。
这有效:
<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>