WPF使用DataBinding根据其值设置标签背景

时间:2016-04-24 12:09:14

标签: c# wpf xaml data-binding

我目前正在制作一个网格,在每个单元格中都有一个标签,标签中的内容来自使用DataBinding的列表。 我试图根据标签中的值更改每个单元格的颜色。例如,如果value = 1,则背景必须为黑色。 这是我现在的代码:

this.context =  context ;

我尝试了使用触发器的不同方法,但似乎没有任何工作。

任何帮助都将不胜感激。

由于

1 个答案:

答案 0 :(得分:3)

这很容易,但是你要复制并粘贴很多Setter标签。您可能需要考虑使用值转换器(参见下文)。

<DataTemplate x:Key="DataTemplate_Level2">
    <Grid 
        SnapsToDevicePixels="True" 
        x:Name="Background">
        <Label Content="{Binding}" />
    </Grid>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding}" Value="1">
            <Setter TargetName="Background" Property="Background" Value="Black" />
        </DataTrigger>
        <DataTrigger Binding="{Binding}" Value="2">
            <Setter TargetName="Background" Property="Background" Value="Khaki" />
        </DataTrigger>
        <DataTrigger Binding="{Binding}" Value="3">
            <Setter TargetName="Background" Property="Background" Value="YellowGreen" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

以下是价值转换器版本:

<Window.Resources>
    <local:ColorConverter x:Key="ColorConverter" />

    <DataTemplate x:Key="DataTemplate_Level2">
        <Grid 
            SnapsToDevicePixels="True" 
            Background="{Binding Converter={StaticResource ColorConverter}}">
            <Label Content="{Binding}" />
        </Grid>
    </DataTemplate>
</Window.Resources>

C#

public class ColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Color clr = Colors.SteelBlue;

        var s = value as String;

        //  Add code here to pick a color or generate RGB values for one
        switch (s) {
            case "1":
                clr = Colors.Black;
                break;
        }

        return new SolidColorBrush(clr); 
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}