हालांकि उत्तर जो एनीमेशन को सीधे एनिमेटेड करने के लिए एनीमेशन को जोड़ने का प्रस्ताव करता है, यह समस्या सरल मामलों में हल करती है, यह वास्तव में व्यावहारिक नहीं है जब आपके पास एक जटिल एनीमेशन है जिसे एकाधिक तत्वों को लक्षित करने की आवश्यकता होती है। (आप निश्चित रूप से प्रत्येक तत्व के लिए एक एनीमेशन संलग्न कर सकते हैं, लेकिन यह प्रबंधन के लिए बहुत भयानक हो जाता है।)
तो इसका समाधान करने का एक वैकल्पिक तरीका है जो आपको DataTrigger
का उपयोग करने वाले एनीमेशन को चलाने के लिए उपयोग करता है जो तत्वों को लक्षित करता है।
ऐसे तीन स्थान हैं जहां आप WPF में तत्वों को जोड़ सकते हैं: तत्व, शैलियों और टेम्पलेट्स। हालांकि, पहले दो विकल्प यहां काम नहीं करते हैं। पहले को अस्वीकार कर दिया गया है क्योंकि डब्ल्यूपीएफ सीधे किसी तत्व पर DataTrigger
के उपयोग का समर्थन नहीं करता है। (जहां तक मुझे पता है, इसके लिए कोई विशेष कारण नहीं है। जहां तक मुझे याद है, जब मैंने कई वर्षों पहले डब्ल्यूपीएफ टीम पर लोगों से पूछा, तो उन्होंने कहा कि उन्हें इसका समर्थन करना अच्छा लगेगा लेकिन नहीं इसे काम करने के लिए समय है।) और शैलियों को बाहर कर दिया गया है, क्योंकि आपके द्वारा रिपोर्ट की गई त्रुटि संदेश कहता है, आप शैली से जुड़े एनीमेशन में नामित तत्वों को लक्षित नहीं कर सकते हैं।
तो टेम्पलेट छोड़ देता है। और आप इसके लिए या तो नियंत्रण या डेटा टेम्पलेट का उपयोग कर सकते हैं।
<ContentControl>
<ContentControl.Template>
<ControlTemplate TargetType="ContentControl">
<ControlTemplate.Resources>
<Storyboard x:Key="myAnimation">
<!-- Your animation goes here... -->
</Storyboard>
</ControlTemplate.Resources>
<ControlTemplate.Triggers>
<DataTrigger
Binding="{Binding MyProperty}"
Value="DesiredValue">
<DataTrigger.EnterActions>
<BeginStoryboard
x:Name="beginAnimation"
Storyboard="{StaticResource myAnimation}" />
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard
BeginStoryboardName="beginAnimation" />
</DataTrigger.ExitActions>
</DataTrigger>
</ControlTemplate.Triggers>
<!-- Content to be animated goes here -->
</ControlTemplate>
</ContentControl.Template>
<ContentControl>
इस निर्माण के साथ, WPF करने के लिए एनीमेशन टेम्पलेट के अंदर नामित तत्वों का उल्लेख करते हैं खुश है। (मैंने एनीमेशन और टेम्पलेट सामग्री दोनों को खाली छोड़ दिया है - जाहिर है कि आप अपनी वास्तविक एनीमेशन एनडी सामग्री के साथ इसे पॉप्युलेट करेंगे।)
कारण यह टेम्पलेट में काम करता है लेकिन शैली नहीं है कि जब आप एक आवेदन करते हैं टेम्पलेट, परिभाषित किए गए नामित तत्व हमेशा मौजूद होंगे, और इसलिए उन तत्वों के संदर्भ में उस टेम्पलेट के दायरे में परिभाषित एनिमेशन के लिए यह सुरक्षित है। यह आम तौर पर शैली के साथ मामला नहीं है, क्योंकि शैलियों को कई अलग-अलग तत्वों पर लागू किया जा सकता है, जिनमें से प्रत्येक में अलग-अलग दृश्य पेड़ हो सकते हैं। (यह थोड़ा निराशाजनक है कि यह आपको परिदृश्यों में भी ऐसा करने से रोकता है जब आप निश्चित हो सकते हैं कि आवश्यक तत्व वहां होंगे, लेकिन शायद ऐसा कुछ है जो एनीमेशन के लिए नामित तत्वों के लिए बाध्य होना बहुत कठिन बनाता है समय। मुझे पता है कि शैली के तत्वों को कुशलतापूर्वक पुन: उपयोग करने के लिए WPF में बहुत सारे अनुकूलन हैं, इसलिए शायद उनमें से एक यह है कि इसका समर्थन करना मुश्किल हो जाता है।)
स्रोत
2014-07-16 07:34:38
ठीक है, यही वह था जो मैं उम्मीद कर रहा था इससे बचें ... लेकिन, मैं यह करता हूं: एक वर्ग में रूटेडएवेंट को कार्यान्वित करने के तरीके पर कोई उदाहरण जो UIElement से प्राप्त नहीं होता है? –