我目前正在制作一个网格,在每个单元格中都有一个标签,标签中的内容来自使用DataBinding的列表。 我试图根据标签中的值更改每个单元格的颜色。例如,如果value = 1,则背景必须为黑色。 这是我现在的代码:
this.context = context ;
我尝试了使用触发器的不同方法,但似乎没有任何工作。
任何帮助都将不胜感激。
由于
答案 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();
}
}