2013-09-18 5 views
2

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

Я использовал эти три цвета.

SolidColorBrush red = new SolidColorBrush(Colors.Red); 
SolidColorBrush green = new SolidColorBrush(Colors.Green); 
SolidColorBrush transp = new SolidColorBrush(Colors.Transparent); 

Когда я создаю эллипс, я уже установил цвета как красный.

Ellipse obj = new Ellipse() 
{ 
    Name = "", 
    Width = width, 
    Height = height, 
    Fill = transp, 
    Stroke = red, 
}; 

Тогда, если я нажму в каком-то эллипсе, я попрошу цвет обводки изменить цвет.

if (obj.Stroke == red) obj.Stroke = green; 
else if (obj.Stroke == green) obj.Stroke = red; 
else obj.Stroke = gray; 

Но проблема в том, что всегда приходится находиться в состоянии else. Даже если цвета совпадают в состоянии if, он возвращает мне false. И всегда, когда меня щелкают, мой эллипс становится серым.

Почему это происходит? Как я могу исправить?

EDIT: this <code>if</code> returns me false

+0

Пытались ли вы с 'obj.Stroke.Color == red.Color'? – Alberto

+0

Вы уверены, что создаете кисти 'red',' green' и 'transp' только один раз? Возможно, вы можете просто использовать предопределенные кисти, такие как «Brushes.Red» и т. Д., А не создавать свои собственные. – Clemens

+0

@Alberto И если я ставлю только один '=' возвращает _Error Невозможно неявно преобразовать тип 'System.Windows.Media.Color' в 'System.Windows.Media.Brush'_ – Butzke

ответ

3

Не создавать свои собственные экземпляры SolidColorBrush, но использовать предопределенные те из Brushes класса:

Ellipse obj = new Ellipse() 
{ 
    Name = "", 
    Width = width, 
    Height = height, 
    Fill = Brushes.Transparent, 
    Stroke = Brushes.Red, 
}; 

... 

if (obj.Stroke == Brushes.Red) 
{ 
    obj.Stroke = Brushes.Green; 
} 
else if (obj.Stroke == Brushes.Green) 
{ 
    obj.Stroke = Brushes.Red; 
} 
else 
{ 
    obj.Stroke = Brushes.Gray; 
} 
+0

Не работает. Инц - '# FFFF0000', а' Brushes.Red' - "FFFF0000", но возвращает false. Как на изображении. – Butzke

+1

Обратите внимание, что этот код не сравнивает значения цвета, а просто ссылки на экземпляры кисти. Тем не менее он должен работать до тех пор, пока не будет другого кода, который изменяет обводку эллипса на другую кисть. – Clemens

3

Вы, вероятно, сравнивая различные экземпляры кисти, поэтому если заявление возвращает ложь. Вы можете сравнить только цвет вместо:

if (((SolidColorBrush)obj.Stroke).Color == Colors.Red) 
{ 
    ... 
} 
+0

Если я использую '(SolidColorBrush)' в начале, я не могу установить «Цвет» в конце. И даже если я сохраняю только «SolidColorBrush», он возвращает мне «false» по сравнению с моим цветом. – Butzke

2

Значение obj.Stroke явно не new SolidColorBrush(Colors.Red) ... это может бытьBrushes.Red или Brushes.Green и т.д., но это только предположение. Вы можете точно узнать, просто положив точку останова на свой if.

Перемещение курсора мыши над obj.Stroke в Visual Studio (когда точка разрыва была хитом) покажет вам точно, что значение, а затем вы можете просто использовать значение что в вашем if заявления.

+0

Я добавляю картинку, чтобы помочь. – Butzke

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