Silverlight Grid ListBox изменить цвет строки - PullRequest
1 голос
/ 19 октября 2011

У меня есть приложение для телефона silverlight, которое я использую, чтобы учиться.Он использует веб-сервисы для получения данных.У меня есть Сетка со списком внутри сетки.Мне бы хотелось, чтобы часть текста в этом списке была определенного цвета в зависимости от условий.

 <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>

Так что, если текстовый блок связан с Status .. если этот статус = true, то яхочу изменить цвет строки или даже просто текстовое поле .... что бы ни было проще.

Я связываю данные, используя следующий код

 Me.MainListBox.ItemsSource = e.Result

Любая помощь будетgreat

~~~~~~~~~~~~~~~~~~~~~~~~~~ Вот модифицированный код

  Private Class SomeData
    Inherits wsData.Data_Queries
    Public Property RowColor As SolidColorBrush
End Class

А вотгде я создаю новый экземпляр класса и привязываю его к списку

 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>

1 Ответ

0 голосов
/ 19 октября 2011

Есть много разных способов сделать это.Самое простое для понимания - использовать IValueConverter, чтобы связать цвет фона строки с цветом, основанным на статусе.Хороший пример этого можно найти здесь (пример WPF, но тот же принцип применяется в Silverlight).

Другой способ сделать это - обернуть ваши объекты данных (что выполучить из e.Result) в объекте ViewModel.Объект ViewModel предоставит все те же свойства, что и ваши данные, но также добавит одно свойство (возможно, RowColor), в котором получатель вернет Brush или Color на основе значения Status.Вам нужно было бы перебрать свои e.Results и создать новую ViewModel для каждого, добавить ViewModels в список, а затем установить ItemsSource в этот новый список ViewModels.

...