![](/img/trans.png)
[英]How to compare if((sender as Grid).Background== new SolidColorBrush(Colors.Green)) in wpf
[英]Compare Colors 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条件中的颜色相同,它if
返回false
。 并且总是在点击时我的椭圆变成灰色。
为什么会这样? 我该怎么办?
编辑:
您可能正在比较不同的画笔实例,这就是if语句返回false的原因。 你可以只比较颜色:
if (((SolidColorBrush)obj.Stroke).Color == Colors.Red)
{
...
}
不要创建自己的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;
}
obj.Stroke
的值显然不是new SolidColorBrush(Colors.Red)
......它可能是Brushes.Red
,或Brushes.Green
等,但这只是猜测。 您可以通过简单地在if
语句上添加一个断点来确定。
将鼠标光标移动到Visual Studio中的obj.Stroke
上(当命中断点时)将告诉您确切的值是什么,然后您可以在if
语句中使用该值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.