2009-11-15 7 views
5

मेरे पास एक सूची बॉक्स है। अब मैं इस तरह से डेटा टेम्पलेट लिखना चाहता हूं, कि पहले आइटम में अन्य वस्तुओं के लिए लाल पृष्ठभूमि और सफेद पृष्ठभूमि होगी। मुझे लगता है कि मुझे डेटाट्रिगर लिखने की ज़रूरत है, लेकिन मुझे नहीं पता कि डेटा टेम्पलेट पहली वस्तु पर आवेदन कर रहा है।डेटा टेम्पलेट से वर्तमान सूची बॉक्स आइटम की अनुक्रमणिका कैसे निर्धारित करें?

<Style TargetType="{x:Type ListBoxItem}"> 
    <Style.Triggers> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
      <Setter Property="Background" Value="LightBlue"></Setter> 
     </Trigger> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
      <Setter Property="Background" Value="LightGreen"></Setter> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

का आनंद:

उत्तर

7

आइटम नियंत्रण एक नज़र here है एक प्रत्यावर्तन गिनती है कि आप

के खिलाफ शैली के लिए उपयोग किया है!

+1

यह बहुत अच्छी सुविधा है, जानकारी के लिए धन्यवाद। लेकिन मुझे केवल ** पहले आइटम की आवश्यकता है, लाल पृष्ठभूमि के लिए, प्रत्येक आइटम जहां (itemIndex% AlternationCount) == 0. बेशक, मैं AlternationCount को आइटम्ससोर्स.काउंट से जोड़ सकता हूं, लेकिन ऐसा करने का कोई बेहतर तरीका नहीं है इस? – levanovd

+0

जो आप रूपरेखा स्वीकार्य लगता है, यह सब xaml में है। यह काम पूरा हो जाता है, और आप बेहतर चीजों पर जा सकते हैं। कोई और अधिक सुरुचिपूर्ण समाधान के साथ आ सकता है। आप वर्तमान आइटम के लिए बाध्यकारी बाध्यकारी के साथ एक बहुआयामी कर सकते हैं और दूसरा एक पूर्वजों बाध्यकारी, सूची बॉक्स के आइटम्ससोर्स को बाध्यकारी कर सकता है। फिर अपने कनवर्टर में आप जांच सकते हैं कि आइटम की अनुक्रमणिका क्या थी। लेकिन ऊपर आपका समाधान xaml में है। मैं हमेशा पठनीयता का पक्ष लेता हूं। यह xaml में सादा दृष्टि में है, एक कनवर्टर –

+0

में लॉक नहीं किया गया है आइटम्ससोर्स को वैकल्पिकता बाध्य करने की आवश्यकता नहीं है। गणना: बस इसे X32 में Int32.MaxValue पर सेट करें। (मैं "{x: स्टेटिक sys: Int32.Maxvalue}" का उपयोग कर AlternationCount = "2147483647" पसंद करता हूं, क्योंकि यह तेज़ है और 2^31-1 अधिकांश प्रोग्रामर के लिए पहचान योग्य है)। –

संबंधित मुद्दे