2010-08-20 16 views
18

में डेटा ट्रिगर के प्रतिस्थापन क्या है यह मेरा परिदृश्य है।सिल्वरलाइट

मेरे पास 2 गुण हैं। प्रकार और राज्य।

टाइप 3 मानों के साथ एक एनम है उदाहरण के लिए, गेंद, कार, तीर। राज्य एक int है जो 3 राज्य मूल्यों को स्वीकार करेगा जैसे -1, 0, 1., इसके अलावा, मेरे पास प्रत्येक राज्य मूल्यों के लिए 9 छवियां हैं।

पसंद है, अगर मैं गेंद के रूप में टाइप करें और -1 के रूप में मान का चयन करता हूं, तो मैं लाल रंग की गेंद प्रदर्शित करना चाहता हूं। यदि मैं 1 के रूप में तीर और मान के रूप में टाइप करता हूं, तो मैं एक ऊपर तीर प्रदर्शित करना चाहता हूं। आदि,

मैं इसे WPF में करने में सक्षम हूं। मैंने एक खाली छवि के साथ 3 डेटा टेम्पलेट बनाए। फिर, मैं चयनित StateValue के लिए विशेष छवि को जांचने और अपडेट करने के लिए DataTrigger का उपयोग करता हूं।

लेकिन, चांदी की रोशनी में मैं यह कैसे कर सकता हूं। मुझे पता है, मुझे इसे वीएसएम में करना है। लेकिन, मैं इस (या) उपलब्ध विकल्पों के बारे में कुछ और जानना चाहता हूं।

उत्तर

6

मैं सिर्फ एक कनवर्टर का उपयोग करता हूं जो आपकी ऑब्जेक्ट को 2 गुणों के साथ लेता है और एक छवि देता है। शुद्ध एक्सएएमएल में कोड इस तरह दर्दनाक है और वास्तव में सी # में आता है।

+0

धन्यवाद एक बहुत परिभाषित किया जा रहा। अंत में, मैं अकेले कनवर्टर्स के साथ समाप्त होता हूं। –

17

मैं Silverlight में DataTriggers के साथ GoToState व्यवहार का उपयोग करता हूं। ब्लेंड में बहुत आसान:

अपने सभी लोगो को अपने दृश्य मॉडल में एक अलग स्थिति में ले जाने के लिए अपने सभी तर्क रखें। राज्य को एक enum के रूप में पेश करें। राज्य टैब खोलें। नया राज्य समूह बनाएं (यदि आपके पास पहले से कोई नहीं है)। अपने राज्य बनाएं। संपत्ति टैब से, व्यवहार का चयन करें। एसेट टैब से GoToState व्यवहार को खींचें और इसे अपने रूट दृश्य तत्व पर छोड़ दें। गुण पैनल में, TriggerType के आगे "नया" बटन क्लिक करें और DataTrigger का चयन करें। याद रखें कि आपके दृश्य मॉडल पर enum? दृश्य मॉडल पर राज्य enum के लिए ट्रिगर बाइंडिंग सेट करें। ट्रिगर वैल्यू को एनम के मूल्य पर सेट करें। राज्य नाम को लक्षित स्थिति में सेट करें।

मिश्रण अब आपके लिए सभी वीएसएम एक्सएएमएल उत्पन्न करना चाहिए था। एक बार जब आप चीजों की लटक लेते हैं तो आप देखेंगे कि कुछ परिदृश्यों में आपको दृश्य मॉडल पर enum की आवश्यकता नहीं है - आप पूरी तरह से दृश्य से राज्य को ड्राइव करने में सक्षम होंगे।

13

माइक पोस्ट की पोस्ट पर विस्तार करने के लिए यहां ब्लैन्ड नहीं होने पर XAML है।

आपको माइक्रोसॉफ्ट के संदर्भ जोड़ने की आवश्यकता है। एक्सप्रेशन। इंटरैक्शन और सिस्टम। विंडो.इंटरक्टिविटी।

<iv:Interaction.Triggers> 
    <ia:DataTrigger Binding="{Binding PropertyName}" Value="PropertyValue" > 
     <ia:GoToStateAction StateName="StateName" /> 
    </ia:DataTrigger> 
</iv:Interaction.Triggers> 
+1

कोई भी मौका आप इस उदाहरण को बना सकते हैं? मुझे XAML ऑनलाइन कहीं भी एक अच्छा, पूर्ण, उदाहरण खोजने में परेशानी हो रही है। –

5

ब्लॉग पोस्ट "Expression SDK in Silverlight–DataTrigger Example" बहुत अच्छी तरह से यह शामिल हैं:

xmlns:ia="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" 
xmlns:iv="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 

फिर अपने नियंत्रण में, VisualStateManager के रूप में एक ही स्तर पर इस डाल दिया।यहां उन्होंने क्या करता है का एक नमूना है:

<i:Interaction.Triggers> 
    <ia:DataTrigger Binding="{Binding IsEnabled}" Comparison="Equal" Value="false"> 
     <ia:ControlStoryboardAction Storyboard="{StaticResource DisableStoryboard}"></ia:ControlStoryboardAction> 
    </ia:DataTrigger> 

    <ia:DataTrigger Binding="{Binding IsEnabled}" Comparison="Equal" Value="true"> 
     <ia:ControlStoryboardAction Storyboard="{StaticResource EnableStoryboard}"></ia:ControlStoryboardAction> 
    </ia:DataTrigger> 
</i:Interaction.Triggers> 

(दो एक्सएमएल नामस्थान उपसर्ग i और ia के साथ इस प्रकार है :)

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
xmlns:ia="http://schemas.microsoft.com/expression/2010/interactions"