有沒有辦法在xaml的某處定義一個動畫(例如,作爲一個資源),然後重複使用它多次?我有許多不同的數據模板的獨立畫筆,它們獨立地需要根據數據觸發器開始同一種動畫。現在,因爲看起來動畫必須定義一個Storyboard.TargetName和Storyboard.TargetProperty。這幾乎違背了可重用性的目的。我想以某種方式聲明「使用此動畫形式的資源,但將其應用於另一個元素」。將動畫和觸發器定義爲可重用資源?
對我來說,這似乎是一個相當基本的,重要的和基本的要求,我很驚訝,它並不是那麼直截了當的表現。我在這裏錯過了什麼嗎?
同樣的事情適用於觸發器。假設我有很多不同的視覺元素,它們都使用顏色動畫表示相同類型的狀態。例如。當「主動」在「錯誤」時淡出爲「紅色」等時淡入綠色。視覺之間的唯一區別是它們的形狀/視覺樹所期望的動畫行爲是相同的,它們都具有位於其視覺樹中某處的元素,一種顏色屬性。我認爲不難想象它會一遍又一遍地重新定義相同的動畫和數據組。每個開發者都討厭這個。我拼命尋找一種更簡單的解決方案,不需要(或至少很少)c#代碼。
我已經想出到目前爲止是這樣的:
定義在資源動畫LIK這(重複此對所有的基本狀態,有一樣激活,活躍,不活躍,錯誤):
<ColorAnimationUsingKeyFrames x:Key="deactivatingColorAnimation"
Storyboard.TargetProperty="Material.(MaterialGroup.Children)[0].Brush.(SolidColorBrush.Color)"
FillBehavior="HoldEnd" RepeatBehavior="Forever" AutoReverse="True">
<ColorAnimationUsingKeyFrames.KeyFrames>
<LinearColorKeyFrame KeyTime="00:00:00" Value="Gray"/>
<LinearColorKeyFrame KeyTime="00:00:0.25" Value="Gray"/>
<LinearColorKeyFrame KeyTime="00:00:0.5" Value="Gray" />
<LinearColorKeyFrame KeyTime="00:00:0.75" Value="Gray" />
</ColorAnimationUsingKeyFrames.KeyFrames>
</ColorAnimationUsingKeyFrames>
觸發器中使用它在故事板(重複的次數不計其數這對每個國家每個X不同的充stateviusal,總是能想出的故事板的新名稱):
<DataTrigger Binding="{Binding SubstrateHolder.State}" Value="Deactivating">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="someStateVisualDeactivatingStoryboard">
<Storyboard Storyboard.TargetName="someStateVisual">
<StaticResource ResourceKey="deactivatingColorAnimation" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="someStateVisualDeactivatingStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
你可以很容易地想象我需要爲所有這些zillion DataTriggers重複複製和粘貼多少膨脹XAML。
將所有這些觸發器定義一次並將其應用於不同的狀態視覺效果將會很酷。在WPF中如何解決這個問題?任何提示?
雅知道我嘗試了一堆不同的東西來爲此提出一個建議,只是沒有在代碼中做某件事情就無法實現。這與我想你會得到的解決方案一樣好。爲了WPF的可擴展性而歡呼,對吧? :) – 2009-11-11 20:52:57
對此使用silverlight行爲API可能是一個好主意。你同意嗎?它是否與標準的.net 3.5框架兼容? – bitbonk 2009-11-12 09:44:23
不,它不兼容,但它們應該是。老實說,我認爲你已經找到了一個很好的解決方案,它以一種非常「自然」的方式利用了WPF架構,不應該在這裏再次猜測你自己。 – 2009-11-13 05:09:49