簡體   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