【问题标题】:silverlight Grid ListBox row change colorsilverlight Grid ListBox 行改变颜色
【发布时间】:2011-10-19 19:13:55
【问题描述】:

我有一个用于学习的 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>

因此,如果绑定到状态的文本块.. 如果该状态 = true 我想更改行的颜色,甚至只是该文本框.... 更容易。

我正在使用以下代码绑定数据

 Me.MainListBox.ItemsSource = e.Result

任何帮助都会很棒

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

  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>

【问题讨论】:

    标签: silverlight colors listbox


    【解决方案1】:

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

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

    【讨论】:

    • Errrr .. 我尝试了你的建议。我创建了一个具有公共属性 RowColor 作为颜色的类。循环并根据状态创建属性 Color.Red 和 Color.Green。在 XAML 中添加了 Foreground="{Binding RowColor}"。当我运行它时,该行不显示。如果我将其更改为 Foreground="Red",则显示效果很好。所以颜色不是我应该用于 RowColor 属性的颜色
    • 您是否将您的 ItemsSource 更改为新课程的集合?可以贴代码吗?
    • 这对我来说是正确的,尽管我承认我根本不了解 VB。我认为这是 C#。
    • 它现在可以工作了。如果我将 rowcolor 属性放入 web 服务调用中。它在 web 服务调用中而不是作为私有类在列表中使用它有什么特别之处。我的 svc webservice 调用正在对它做一些事情,使它能够正确绑定.. 我不确定是什么让它工作
    • 当数据作为服务返回并且我查看列表中的项目时,我看到的不同之处在于,对于项目中的每个属性,都有第二个属性相同名称和字段添加到末尾。只是把它放在那里以防有人可以提供帮助
    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 2021-08-08
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多