विंडोज 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() का उपयोग कर इंडेक्स ऑन-द-फ्लाई की गणना करें।
मुझे लगता है कि अपने आप के बारे में सोचा है, लेकिन तुम कैसे कनवर्टर में पंक्ति सूचकांक पारित होगा? क्या ऐसा करने के लिए कुछ एक्सएएमएल वाक्यविन्यास है, या क्या मुझे स्पष्ट रूप से प्रत्येक ऑब्जेक्ट को बताना होगा कि संग्रह में इसकी अनुक्रमणिका क्या है? –
आपको ऑब्जेक्ट में एक संपत्ति जोड़ने की आवश्यकता होगी, हां। फिर पृष्ठभूमि = "{बाइंडिंग आइटम इंडेक्स, कनवर्टर = {स्टेटिक रिसोर्स आइटमइंडेक्स टूबैकग्राउंड कनवर्टर}}" –
जैसे कुछ ऐसा करें, यह सही जवाब है, धन्यवाद। यह एक वास्तविक शर्म की बात है कि कनवर्टर में आइटम इंडेक्स को पास करने के लिए कोई XAML वाक्यविन्यास नहीं है। शायद मैं अपने माता-पिता के संग्रह को संदर्भित करने के लिए आइटम सेट कर सकता हूं और केवल .indexOf का उपयोग कर सकता हूं - यह दृष्टिकोण ऐसा लगता है कि यह शायद सभी प्रकार के नियमों को तोड़ देता है। –