我正在嘗試基於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