从ObservableCollection XAML更改一个对象的样式

时间:2013-03-15 15:00:19

标签: c# .net xaml winrt-xaml observablecollection

我有ObservableCollection,其中包含5个obejcts。我可以在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>

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

2 个答案:

答案 0 :(得分:2)

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

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

通过这种方式,您可以选择网格中的每个项目颜色并动态更改它只是更改对象属性,但背景属性必须是指定有效颜色的字符串

object.Background = "Red"

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

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

答案 1 :(得分:1)

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