IValueConverter не работает с SolidColorBrush

У меня есть индикатор выполнения, цвет которого я хочу изменить в зависимости от логического значения: true - зеленый, false - красный. У меня есть код, который кажется, что он должен работать (он возвращает правильное значение, когда я привязываю его к текстовому полю), но не тогда, когда это свойство цвета индикатора выполнения. Конвертер определяется как this (в App.xaml.cs, поскольку я хотите получить к нему доступ где угодно):

public class ProgressBarConverter : System.Windows.Data.IValueConverter
{
    public object Convert(
        object o, 
        Type type, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {
        if (o == null)
            return null;
        else
            //return (bool)o ? new SolidColorBrush(Colors.Red) : 
            //                 new SolidColorBrush(Colors.Green);
            return (bool)o ? Colors.Red : Colors.Green;
    }

    public object ConvertBack(
        object o, 
        Type type, 
        object parameter, 
        System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

Затем я добавляю следующее в App.xaml (чтобы он мог быть глобальным ресурсом):


    
    
        
            
            
            
                
                    
                
                
                    
                
            
        
    

Я добавил следующее в MainPage.xaml, чтобы отобразить их:


    

А затем в MainPage.xaml.cs я определяю класс для хранения данных и привязываю их к listBox:

namespace PhoneApp1
{
    public class TestClass
    {
        public bool isNeeded { get; set; }
        public string name { get; set; }
    }

    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();

            var list = new LinkedList();
            list.AddFirst(
                                new TestClass { 
                                    isNeeded = true, name = "should be green" });
            list.AddFirst(
                                new TestClass { 
                                    isNeeded = false, name = "should be red" });
            listBox.ItemsSource = list;
        }
    }
}

Я приложил минимальный рабочий пример , чтобы его можно было просто собрать и протестировать. Изображение вывода здесь:

enter image description here

Он возвращает значения из преобразователя для текстового поля, но не индикатор выполнения. Когда я запускаю отладчик, он даже не вызывает его.

Спасибо за любую помощь!

6
задан ctacke 11 January 2012 в 17:27
поделиться