silverlight栅格列表框行更改颜色

silverlight栅格列表框行更改颜色,silverlight,colors,listbox,Silverlight,Colors,Listbox,我有一个silverlight手机应用程序,我正在用它学习。它使用web服务来获取数据。我有一个网格,网格内有一个列表框。我希望能够有一些文本内的列表框是一个特定的颜色的基础上的条件 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <ListBox x:Name="MainListBox" Margin="0,0,-12,0" SelectionChanged="MainListBox

我有一个silverlight手机应用程序,我正在用它学习。它使用web服务来获取数据。我有一个网格,网格内有一个列表框。我希望能够有一些文本内的列表框是一个特定的颜色的基础上的条件

 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <ListBox x:Name="MainListBox" Margin="0,0,-12,0"  SelectionChanged="MainListBox_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="0,0,0,17" Width="432">
                        <TextBlock Text="{Binding Operation}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                        <TextBlock Text="{Binding Status}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                        <TextBlock Text="{Binding DateTimeStart1}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                        <TextBlock Text="{Binding DataID}" Visibility="Collapsed"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
任何帮助都会很好

~~~~~~~~~~~~~~~~~~~~~~~~~~ 这是修改后的代码

  Private Class SomeData
    Inherits wsData.Data_Queries
    Public Property RowColor As SolidColorBrush
End Class
这里是我创建类的新实例并将其绑定到listbox的地方

 Dim oSomeDataS As New List(Of SomeData)
    For Each x In e.Result
        Dim oSomeData As New SomeData
        With x
            oSomeData.DataID = .DataID
            oSomeData.DateTimeStart1 = .DateTimeStart1
            oSomeData.FinishFromStart = .FinishFromStart
            oSomeData.Operation = .Operation
            oSomeData.ShortDate = .ShortDate
            oSomeData.Status = .Status
            oSomeData.TblComputerNameID = .TblComputerNameID
            oSomeData.TblOperationID = .TblOperationID
            oSomeData.TblStatusID = .TblStatusID
            oSomeData.TblSiteID = .TblSiteID

            If .Status = "False" Then
                oSomeData.RowColor = New SolidColorBrush(Colors.Red)
            Else
                oSomeData.RowColor = New SolidColorBrush(Colors.Green)
            End If
            oSomeDataS.Add(oSomeData)
        End With
    Next
    Me.MainListBox.ItemsSource = oSomeDataS.OrderBy(Function(o) o.Operation)
还有XAML代码

 <ListBox x:Name="MainListBox" Margin="0,0,-12,0"  SelectionChanged="MainListBox_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="0,0,0,17" Width="432">
                        <TextBlock Text="{Binding Operation}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                        <TextBlock Text="{Binding Status}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}" Foreground="{Binding RowColor}"/>
                        <TextBlock Text="{Binding DateTimeStart1}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                        <TextBlock Text="{Binding DataID}" Visibility="Collapsed"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

有很多不同的方法可以做到这一点。最容易理解的方法是使用
IValueConverter
将行的背景颜色绑定到基于状态的颜色。我们可以找到一个很好的例子(例子是WPF,但同样的原理也适用于Silverlight)


另一种方法是将数据对象(从e.Result获得)包装到ViewModel对象中。ViewModel对象将公开与数据相同的所有属性,但也会添加一个属性(可能是
RowColor
),其中getter根据
Status
的值返回画笔或颜色。您必须循环查看e.结果,并为每个结果创建一个新的ViewModel,将ViewModels添加到列表中,然后将ItemsSource设置为新的ViewModels列表。

Errrr。。我试了你的建议。我创建了一个将公共属性RowColor作为颜色的类。循环并使属性颜色为。红色和颜色。绿色基于状态。在XAML中添加了前台=“{Binding RowColor}”。当我运行它时,该行不会显示。如果我将其更改为前台=“红色”,则显示良好。那么颜色不是我应该用于RowColor属性的颜色吗?您是否将ItemsSource更改为新类的集合?你能发布代码吗?我觉得这很正确,尽管我承认我一点也不懂VB。我想这是C#。它现在起作用了。。如果我将rowcolor属性放入webservice调用中。它在webservice调用中而不是作为私有类在列表中使用它有什么特别之处。我的svc webservice调用正在对它执行某些操作,以允许它正确绑定。。我不确定是什么让它起作用当数据作为服务返回时,我查看列表中的一个项,我看到的区别是,对于该项中的每个属性,都有第二个属性,该属性的末尾添加了相同的名称和字段。只是把它放在那里以防万一有人能帮忙
 <ListBox x:Name="MainListBox" Margin="0,0,-12,0"  SelectionChanged="MainListBox_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Margin="0,0,0,17" Width="432">
                        <TextBlock Text="{Binding Operation}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                        <TextBlock Text="{Binding Status}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}" Foreground="{Binding RowColor}"/>
                        <TextBlock Text="{Binding DateTimeStart1}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                        <TextBlock Text="{Binding DataID}" Visibility="Collapsed"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>