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

ObservableCollectionにデータを入力し、xamlでバインディングを使用するオブジェクトにBackgroundプロパティを追加できます

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

このようにして、グリッド内のすべてのアイテムの色を選択し、オブジェクトプロパティを変更するだけで動的に変更できますが、Backgroundプロパティは有効な色が割り当てられた文字列である必要があります

object.Background = "Red"

または、 Converterを使用して、オブジェクト内の既存のプロパティを色に変換することもできます。たとえば、いくつかの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

1つのDataTemplateSelectorを使用できます(チュートリアルを参照) 。

于 2013-03-15T15:07:36.893 に答える