वहाँ एक एनीमेशन एक बार XAML में कहीं परिभाषित करने के लिए (जैसे। एक संसाधन के रूप में) और फिर इसे पुन: उपयोग कई बार कोई तरीका है? मेरे पास अलग-अलग डेटामैप्लेट्स में बहुत से स्वतंत्र ब्रश हैं जिन्हें डेटाैट्रिगर के आधार पर स्वतंत्र रूप से उसी तरह की एनीमेशन शुरू करने की आवश्यकता होती है। अब ऐसा लगता है कि एक एनीमेशन को स्टोरीबोर्ड को परिभाषित करना है। लक्ष्यनाम और स्टोरीबोर्ड। लक्ष्यप्रोपर्टी। यह काफी पुन: प्रयोज्यता के उद्देश्य को हरा देता है। मैं किसी भी तरह से घोषणा करना चाहता हूं "इस एनीमेशन का उपयोग संसाधन का उपयोग करें, लेकिन इस बार इसे किसी अन्य तत्व पर लागू करें"।पुन: प्रयोज्य संसाधन के रूप में एनिमेशन और ट्रिगर परिभाषित करता है?
मेरे लिए यह एक बुनियादी, महत्वपूर्ण और आवश्यक अनुरोध प्रतीत होता है और मुझे आश्चर्य है कि यह सीधे आगे बढ़ने के लिए आगे नहीं है। क्या मुझसे कोई चूक हो रही है?
वही बात ट्रिगर्स के लिए लागू होती है। मान लीजिए मेरे पास बहुत सारे दृश्य तत्व हैं जो रंगीन एनिमेशन का उपयोग करते हुए सभी प्रकार के राज्य का प्रतिनिधित्व करते हैं। जैसे हरे रंग फीका जब "सक्रिय" "लाल" को फीका जब "त्रुटि" आदि दृश्यों के बीच फर्क सिर्फ इतना है उनके आकार/दृश्य पेड़ है वांछित एनीमेशन व्यवहार ही है, वे सब उनके दृश्य पेड़ है कि कहीं एक तत्व है प्रकार के रंग की एक संपत्ति। मुझे लगता है कि कल्पना करना मुश्किल नहीं है कि एक ही एनिमेशन और डेटाट्रिगर सेट को बार-बार फिर से परिभाषित करना कितना कठिन है। प्रत्येक डेवलपर इससे नफरत करता है। मैं बेहद आसान समाधान की तलाश में हूं जिसके लिए कोई (या कम से कम बहुत कम) सी # कोड की आवश्यकता नहीं है।
एक संसाधन में एनिमेशन को परिभाषित करें 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>
उपयोग यह स्टोरीबोर्ड में चलाता में (प्रत्येक राज्य एक्स प्रत्येक differnt stateviusal के लिए समय की इस zillions दोहराए जाते हैं, हमेशा स्टोरीबोर्ड लिए कोई नया नाम के साथ आते हैं):
<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>
आप आसानी से कल्पना कर सकते हैं कि एक्सएएमएल को कितने ब्लोएट को बार-बार उन सभी अरब डेटाट्रिगर्स के लिए कॉपी और पेस्ट करना है।
यह सभी ट्रिगर्स को एक बार परिभाषित करने और विभिन्न राज्य दृश्यों पर लागू करने के लिए अच्छा होगा। डब्ल्यूपीएफ में इस तरह कुछ कैसे हल किया गया है? कोई टिप?
हां पता है कि मैंने इसके लिए एक सुझाव के साथ आने के लिए विभिन्न चीजों का एक गुच्छा करने की कोशिश की और यह कोड में कुछ किए बिना संभव नहीं था। यह एक अच्छा समाधान है जैसा कि मुझे लगता है कि आप प्राप्त करने जा रहे हैं। WPF विस्तारशीलता के लिए Hurray, है ना? :) –
इसके लिए Silverlight व्यवहार API का उपयोग करना एक अच्छा विचार हो सकता है। क्या आप सहमत हैं? क्या यह मानक .NET 3.5 ढांचे के साथ संगत है? – bitbonk
नहीं, यह संगत नहीं है, हालांकि उन्हें माना जाता है। ईमानदारी से मुझे लगता है कि आपको एक बहुत अच्छा समाधान मिला है जो डब्ल्यूपीएफ आर्किटेक्चर को "प्राकृतिक" तरीके से लेता है और इसे यहां बिल्कुल दूसरा अनुमान नहीं लगाया जाना चाहिए। –