2014-01-15 4 views
0

Мне нужно отображать данные в приложении WPF, цвет которого пропорционален измерению значения свойства элемента, как на изображении ниже.Преобразователь цветовой шкалы

enter image description here

Мой вопрос как обеспечить цвет/LinearGradientBrush (зелено-черно-красный) на основе относительной стоимости? Самые низкие значения должны возвращать красный (тарелка), средние значения черный/серый (иш) и наивысшие значения жадности (ish), как на изображении.

Я начал привязывать цвет фона каждой панели к значению элемента с помощью конвертера, который может возвращать некоторые отдельные цвета, но я хотел бы вернуть весь диапазон возможных LinearGradientBrushes на основе относительного значения.

Public Class ValueToColorConverter 
    Inherits MarkupExtension 
    Implements IValueConverter 

    Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert 
     Dim v As Double = System.Convert.ToDecimal(value) 
     If v < 0 Then 
      Return Brushes.Red 
     ElseIf v < 0.05 Then 
      Return Brushes.Gray 
     Else 
      Return Brushes.Green 
     End If 
    End Function 

    Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack 
     Throw New System.NotImplementedException() 
    End Function 

    Public Overrides Function ProvideValue(ByVal serviceProvider As System.IServiceProvider) As Object 
     Return Me 
    End Function 

End Class 
+0

Я думаю, что LinearGradientBrush вам не подходит. Похоже, вы просто хотите создать «SolidColorBrush» с определенным значением цвета. Взгляните на метод ['Color.FromArgb'] (http://msdn.microsoft.com/en-us/library/system.windows.media.color.fromargb.aspx). – Clemens

+0

Что случилось с текущим решением? Кажется, я так и делал. – Sheridan

+0

Проблема с текущим решением заключается в том, что он может вернуть только 3 уникальных цвета (красный, серый или зеленый), но я хочу вернуть цвет из большего диапазона (неограниченное количество) возможных цветов. Я хочу рассчитать определенный цвет (SolidColor или LinearGradient, что угодно, что угодно) от данного значения. – Nuts

ответ

0

Посмотрите this ответ на подобный вопрос. Кажется, делать то, что вы хотите.

Смежные вопросы