我有一个预测课程。其中一个字段是Enum:
enum GeneralForecast
{
Sunny,
Rainy,
Snowy,
Cloudy,
Dry
}
class Forecast
{
public GeneralForecast GeneralForecast { get; set; }
public double TemperatureHigh { get; set; }
public double TemperatureLow { get; set; }
public double Percipitation { get; set; }
}
我在ListBox上显示预测列表,我想在ListBox中设置项目的BackgroundColor取决于GeneralForecast。
所以我创建了Converter:
类GeneralForecastToBrushConverter:IValueConverter {
public object Convert(object value, Type targetType, object parameter, string language)
{
var gf = (GeneralForecast) value;
switch (gf)
{
case GeneralForecast.Cloudy:
return "FF1D1D1D";
case GeneralForecast.Dry:
return "55112233";
case GeneralForecast.Rainy:
return "88FF5522";
case GeneralForecast.Snowy:
return "9955FF22";
case GeneralForecast.Sunny:
return "FF11FF99";
}
return "FFFFFFFF";
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
这是我的XAML:
<Page.Resources>
<local:GeneralForecastToBrushConverter x:Key="gf2color"/>
</Page.Resources>
<ListBox ItemsSource="{Binding}" Grid.Row="2" HorizontalAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Margin="4" BorderBrush="Black" Padding="4"
BorderThickness="2"
Background="{Binding GeneralForecast, Converter={StaticResource gf2color}}">
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="20" FontWeight="Bold"
Text="{Binding GeneralForecast}"/>
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如果我调试我的转换器,我可以看到它返回不同的颜色,但我有所有项目相同的颜色。为什么?
答案 0 :(得分:2)
当你在XAML中写这样的东西时:
<Button Background="#FF11111" />
Xaml解析器将在运行时将该字符串转换为其等效颜色。
但是当你以某种方式在C#中指定颜色时,你可能不会将颜色设置为字符串。
相反,你应该使用类似SolidColorBrush实例的东西。
因此返回一些变量,即Brush,例如实心或渐变颜色画笔。
如果需要任何其他信息,请告诉我。