2012-08-17 2 views
8

विंडोज 8 के लिए मेरे मेट्रो स्टाइल ऐप में, मैं एक ऑब्जेर्जेबल कोलेक्शन में एक सूचीदृश्य बाध्य कर रहा हूं और मुझे प्रत्येक ListViewItem के पृष्ठभूमि रंग को वैकल्पिक (सफेद, ग्रे, this page देखते हैं - सफेद, आदि)मेट्रो ऐप - ListView - ListViewItems के वैकल्पिक पृष्ठभूमि रंग को कैसे करें

<ListView x:Name="stopsListView" ItemsSource="{Binding}" > 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <Grid Height="66" > 
        <TextBlock Text="{Binding Title}" /> 
       </Grid> 
      </DataTemplate> 
     </ListView.ItemTemplate> 

WPF में, यह ट्रिगर के साथ एक शैली का उपयोग किया जाता है।

मेट्रो ऐप में आप इसे कैसे पूरा करते हैं?

अद्यतन:

सही जवाब के बाद नीचे दिया गया था, मैं दूर चला गया है और वास्तव में यह कोडित।

मूल्य कनवर्टर वर्ग के लिए कोड::

public class AltBackgroundConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     if (!(value is int)) return null; 
     int index = (int)value; 

     if (index % 2 == 0) 
      return Colors.White; 
     else 
      return Colors.LightGray; 
    } 

    // No need to implement converting back on a one-way binding 
    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

XAML सूचीदृश्य के लिए कोड: यहाँ जो इसे की जरूरत है किसी के लिए कुछ कोड है

<ListView x:Name="stopsListView" ItemsSource="{Binding}"> 

     <ListView.ItemTemplate> 
      <DataTemplate> 
       <Grid Width="250" Height="66" Margin="5"> 
        <Grid.Background> 
         <SolidColorBrush Color="{Binding IndexWithinParentCollection, Mode=OneWay, Converter={StaticResource AltBGConverter}}" /> 
        </Grid.Background> 

... और, जब आइटम जोड़ने संग्रह में, या संग्रह को संशोधित करने के लिए, संग्रह के भीतर अपना इंडेक्स सेट करना याद रखें:

myCollection.add(item); 
item.IndexWithinParentCollection = myCollection.Count; 

बेशक, यदि आपका संग्रह अक्सर बदलता है तो यह दृष्टिकोण बनाए रखने के लिए महंगा होगा, क्योंकि आपको अपने आइटम को फिर से अनुक्रमित करना होगा, इसलिए मुझे प्रत्येक आइटम के भीतर मूल संग्रह के संदर्भ को संग्रहीत करना आसान लगता है, फिर संग्रह में हर बार सूचकांक मानों को लगातार अद्यतन करने से बचने के लिए IndexOf() का उपयोग कर इंडेक्स ऑन-द-फ्लाई की गणना करें।

उत्तर

5

आप एक कनवर्टर का उपयोग कर सकते हैं - एक आइटम से एक पंक्ति सूचकांक पकड़ो और इसे एक ब्रश में परिवर्तित करें। इसके अलावा - यदि आइटम टेम्पलेट आपको पर्याप्त नियंत्रण नहीं देता है - ListViewItem टेम्पलेट स्तर पर ब्रश को संशोधित करने के लिए ItemContainerStyle का उपयोग करें।

एक और विकल्प आइटम टेम्पलेट चयनकर्ता निर्दिष्ट करना हो सकता है जो आपको किसी आइटम के आधार पर एक अलग ब्रश के साथ एक अलग टेम्पलेट देता है। आपको अभी भी पंक्ति सूचकांक उत्पन्न करने की आवश्यकता होगी हालांकि किसी भी तरह चयनकर्ता को यह निर्धारित करने में सक्षम बनाता है कि आइटम एक अजीब स्थिति में है या नहीं।

+0

मुझे लगता है कि अपने आप के बारे में सोचा है, लेकिन तुम कैसे कनवर्टर में पंक्ति सूचकांक पारित होगा? क्या ऐसा करने के लिए कुछ एक्सएएमएल वाक्यविन्यास है, या क्या मुझे स्पष्ट रूप से प्रत्येक ऑब्जेक्ट को बताना होगा कि संग्रह में इसकी अनुक्रमणिका क्या है? –

+0

आपको ऑब्जेक्ट में एक संपत्ति जोड़ने की आवश्यकता होगी, हां। फिर पृष्ठभूमि = "{बाइंडिंग आइटम इंडेक्स, कनवर्टर = {स्टेटिक रिसोर्स आइटमइंडेक्स टूबैकग्राउंड कनवर्टर}}" –

+0

जैसे कुछ ऐसा करें, यह सही जवाब है, धन्यवाद। यह एक वास्तविक शर्म की बात है कि कनवर्टर में आइटम इंडेक्स को पास करने के लिए कोई XAML वाक्यविन्यास नहीं है। शायद मैं अपने माता-पिता के संग्रह को संदर्भित करने के लिए आइटम सेट कर सकता हूं और केवल .indexOf का उपयोग कर सकता हूं - यह दृष्टिकोण ऐसा लगता है कि यह शायद सभी प्रकार के नियमों को तोड़ देता है। –

1

कभी लेकिन इस तरह स्टाइल क्या करना है, तो कोशिश की:

आप कुछ संपत्ति के लिए एक पृष्ठभूमि रंग बाँध और है कि संपत्ति शायद सूचीदृश्य में वर्तमान आइटम के सूचकांक के अनुसार IValueConverter के माध्यम से स्थापित किया जाएगा।

यदि मुझे कोई समझ है।

संपादित करें:

अजीब बात है, जबकि मैं अपने जवाब लिख रहा था, फ़िलिप Skakun बिल्कुल एक ही विचार के साथ आया था।

+0

मैं पहले यहां था। :) –

+0

वैसे मैं अपने विचार टाइप कर रहा था, बहुत धीरे-धीरे तनाव का coz (अगर मैं गलत था), तो मैंने देखा कि 'किसी के साथ पॉपअप पहले से ही उत्तर दिया है जब आप धीमी गति से खेल रहे हैं' :) – Oleg

+0

स्टैक ओवरव्लो मजेदार चीज है। :) –

0

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

इस यह आपकी मदद करेगा प्रयास करें, http://www.bendewey.com/index.php/523/alternating-row-color-in-windows-store-listview

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