Свяжите Foreground
вашего управления с change_percent
и используйте ValueConverter , чтобы превратить его в Brush
.
Вот базовый преобразователь, который меняет цвет с красного на желтый и превращается в зеленый:
public class PercentToBrushConverter : IValueConverter
{
///2698092/est-li-prostoi-sposob-smeshat-dva-znacheniya-system-drawing-color#2698095
private Color Blend(Color color, Color backColor, double amount)
{
byte r = (byte)((color.R * amount) + backColor.R * (1 - amount));
byte g = (byte)((color.G * amount) + backColor.G * (1 - amount));
byte b = (byte)((color.B * amount) + backColor.B * (1 - amount));
return Color.FromRgb(r, g, b);
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//Assumes the percent property to be an int.
int input = (int)value;
Color red = Colors.Red;
Color yellow = Colors.Yellow;
Color green = Colors.Green;
Color color;
if (input <= 50)
{
color = Blend(yellow, red, (double)input/50);
}
else
{
color = Blend(green, yellow, (double)(input - 50) / 50);
}
return new SolidColorBrush(color);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
Который вы могли бы использовать так:
<ListView>
<ListView.Resources>
<vc:PercentToBrushConverter x:Key="PercentToBrushConverter"/>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Header="Progress">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<!-- An indicator ellipse as suggested by Neil Barnwell -->
<Ellipse Height="16" Width="16" Fill="{Binding change_percent, Converter={StaticResource PercentToBrushConverter}}"/>
<TextBlock Margin="5,0,0,0" Text="{Binding change_percent}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<!-- ... -->
</GridView>
</ListView.View>
</ListView>
Как сделать объявление xmlns
:
Вам необходимо определить класс в некотором пространстве имен:
namespace MySolution.ValueConverters
{
public class PercentToBrushConverter : IValueConverter { /*...*/ }
}
Это пространство имен может быть отображено в Window
или любом другом родительском элементе управления:
<Window ...
xmlns:vc="clr-namespace:MySolution.ValueConverters">
Отображает пространство имен MySolution.ValueConverters
на префикс vc
. Для получения дополнительной информации см. MSDN .