比较WPF颜色

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


你确定只创建了 redgreentransp 画刷一次吗?或许你可以直接使用预定义的画刷,如 Brushes.Red 等,而不是自己创建。 - Clemens
1
@Alberto 如果我只放一个 = 就会返回 _错误1:无法隐式转换类型 'System.Windows.Media.Color' 为 'System.Windows.Media.Brush'_。 - Butzke
@Alberto 如果我继续使用 ==,会返回错误信息:_错误1 运算符“==”无法应用于类型为“System.Windows.Media.Brush”和“System.Windows.Media.Color”的操作数_。 - Butzke
@Clemens 我确定我只创建了一次。使用 Brushes.Red 我遇到了相同的问题。 - Butzke
@Clemens 我不知道。 - Butzke
显示剩余2条评论
3个回答

3

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

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

如果我在开头使用(SolidColorBrush),我就不能在最后设置Color。即使我只保留SolidColorBrush,与我的颜色进行比较时也会返回false - Butzke

3
不要创建自己的SolidColorBrush实例,而是使用预定义的来自Brushes类的实例: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;
}

它不起作用。描边是#FFFF0000,而Brushes.Red也是“FFFF0000”,但返回false。就像图片中一样。 - Butzke
1
请注意,此代码不比较颜色值,而只是引用刷子实例。只要没有其他更改椭圆形笔画为其他刷子的代码,它仍然应该正常工作。 - Clemens

2
obj.Stroke的值显然不是new SolidColorBrush(Colors.Red)...它可能是Brushes.Red,或者Brushes.Green等等,但这只是一个猜测。您可以通过在if语句上设置断点来确定确切的值。
在Visual Studio中将鼠标光标移动到obj.Stroke(当断点被命中时)将告诉您确切的值,然后您可以在if语句中使用该值。

我添加图片以帮助说明。 - Butzke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接