3

我在画布上有一些省略号。我希望当我在椭圆上方单击时,它应该将笔划的颜色更改为绿色,如果我再次单击它,它就会变回原来的红色。

我用过这三种颜色。

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。并且总是当点击我的椭圆变成灰色。

为什么会这样?我该如何解决?

编辑: 这个 <code>if</code> 返回 false

4

3 回答 3

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;
}
于 2013-09-18T13:54:23.737 回答
3

您可能正在比较不同的画笔实例,这就是 if 语句返回 false 的原因。您可以只比较颜色:

if (((SolidColorBrush)obj.Stroke).Color == Colors.Red)
{
    ...
}
于 2013-09-18T13:43:06.333 回答
2

的值obj.Stroke显然不是new SolidColorBrush(Colors.Red)……它可能Brushes.Red, 或Brushes.Green等,但这只是一个猜测。if只需在语句上放置一个断点即可确定。

在 Visual Studio 中移动鼠标光标obj.Stroke(当断点被击中时)将准确地告诉您该值是什么,然后您可以在语句中简单地使用值。if

于 2013-09-18T13:44:45.733 回答