J'ai une application de téléphone Silverlight que j'utilise pour apprendre. Il utilise des services Web pour obtenir les données. J'ai une grille avec une liste à l'intérieur de la grille. J'aimerais pouvoir avoir une partie du texte à l'intérieur de cette zone de liste, une certaine couleur en fonction des conditions.silverlight Grille ListBox ligne changer de couleur
<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>
Donc, si le textblock qui est lié au statut .. si ce statut = true je veux changer la couleur de la ligne ou même juste que .... ce qui est textbox plus facile.
je suis liant les données en utilisant le code suivant
Me.MainListBox.ItemsSource = e.Result
Toute aide serait grande
~~~~~~~~~~~~~~~~~~~~ ~~~~~~ Voici le code modifié
Private Class SomeData
Inherits wsData.Data_Queries
Public Property RowColor As SolidColorBrush
End Class
et voici où je crée une nouvelle instance de la classe et la liaison à la zone de liste
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)
Et le code 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>
J'ai créé une classe qui a une propriété publique RowColor en tant que couleur. bouclé à travers et fait la propriété Color.Red et Color.Green basé sur le statut. dans le XAML a ajouté Foreground = "{Binding RowColor}". Quand je cours, cette ligne n'apparaît pas. Si je le change en avant-plan = "Rouge", cela se montre bien. La couleur n'est donc pas ce que je devrais utiliser pour la propriété RowColor – jvcoach23
Avez-vous modifié votre ItemsSource pour en faire une collection de votre nouvelle classe? Pourriez-vous poster du code? –
Ajouté le code dans une édition ci-dessus – jvcoach23