繁体   English   中英

比较颜色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 并且总是在点击时我的椭圆变成灰色。

为什么会这样? 我该怎么办?

编辑: 这个<code> if </ code>返回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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM