我正在尝试基于ViewModel中的属性更改创建一个简单的(我认为)动画效果。我希望目标是自定义控件的控件模板中的特定文本块,该控件从Window继承。WPF:选择动画的目标
从我看过的文章示例中,DataTrigger是实现此目的的最简单方法。看起来,Window.Triggers不支持DataTriggers,这导致我尝试在样式中应用触发器。我目前遇到的问题是我似乎无法定位TextBlock(或任何其他子控件) - 下面的代码是将动画应用于整个窗口的背景。
如果我完全离开StoryBoard.Target,效果完全一样。
这是错误语法的正确方法,还是有更简单的方法来实现这一点?
<Style x:Key="MyWindowStyle" TargetType="{x:Type Window}">
<Setter Property="Template" Value="{StaticResource MyWindowTemplate}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ChangeOccurred}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard BeginTime="00:00:00" Duration="0:0:2" Storyboard.Target="{Binding RelativeSource={RelativeSource AncestorType=TextBlock}}"
Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)">
<ColorAnimation FillBehavior="Stop" From="Black" To="Red" Duration="0:0:0.5" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
更新
应该也提到,我试图命名的TextBlock,并通过StoryBoard.TargetName(如Timores建议)引用它,并得到了错误“的TargetName属性不能在一组风格二传手“。
你想要的动画目标究竟是什么?你说*“自定义控件的控件模板中的特定文本块”*,但是为'Window'创建样式而不是自定义控件。你能提供包含动画目标的代码吗?上面的目标绑定不应该工作,因为我不指望Window有一个TextBlock类型的祖先,是吗?!这可能吗? – gehho 2010-04-30 07:01:54
对不起,这是一个难以描述的设置。自定义控件*是一个窗口,因为它从窗口派生。安装程序/样式是由其他人创建的,所以我试图改进这个动画。 Textblock是一个子控件 - 再次查看它,RelativeSource/AncestorType可能不是很接近,因为我试图定位一个孩子而不是父母? – 2010-04-30 13:39:14