1

我有包含 5 个对象的 ObservableCollection。我可以在 xaml 中为整个集合设置颜色、背景等,如下所示:

<GridView.ItemTemplate>
    <DataTemplate>
        <Grid Width="200">
            <Rectangle Width="auto" Fill="#333333" />
            <TextBlock Text="{Binding}" Foreground="#fff" FontSize="80" FontFamily="Verdana" FontWeight="Bold" VerticalAlignment="Center" HorizontalAlignment="Center" />
        </Grid>
    </DataTemplate>
</GridView.ItemTemplate>

但这会影响此集合中的每个对象。如何设置不同的颜色,例如最后一个对象?

4

2 回答 2

2

您可以将Background属性添加到填充ObservableCollection并在 xaml 中使用绑定的对象

<Grid Width="200" Background="{Binding Background}" />

这样,您可以选择网格中的每个项目颜色并动态更改它,只需更改对象属性,但背景属性必须是分配有有效颜色的字符串

object.Background = "Red"

或者,您可以使用转换器将对象中的某些现有属性转换为颜色。例如,如果您有一些Group属性并且每个组都应该用自己的颜色表示,您可以执行以下操作:

XAML

<Grid Width="200" Background="{Binding Group, Converter={StaticResource ColorConverter}}" />


C#

public class ColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (parameter == null)
        {
            return value;
        }

        string group = (string) parameter;
        string color = "";

        if(group.equals("Group 1"))
        {
            color = "Red";
        }else if(group.equals("Group 2"))
        {
            color = "Green";
        }else{
            color = "Blue"
        }

        return color;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return value;
    }
}
于 2013-03-15T22:19:28.923 回答
1

您可以使用一个 DataTemplateSelector(请参阅:教程

于 2013-03-15T15:07:36.893 回答