簡體   English   中英

WPF:等於(Control.background,SolidColorBrush)始終為false

[英]WPF: Equals(Control.background, SolidColorBrush) constantly false

我有一個List<SolidColorBrush> lColorBrushes ,想將某些按鈕的背景與其內容進行比較。 按鈕保存在List<Button> lClickedButtons

            foreach (var oBtn in lClickedButtons)
            {
                for (var i = 0; i < lColorBrushes.Count; i++)
                {
                    if (Equals(oBtn.Background, lColorBrushes[i]))
                    {
                        //oBtn gets cool stuff
                    }
                }
            }

我之前做了完全相同的事情,而且效果很好。 但是,無論出於何種原因(我認為與我的《准則》的早期環境沒有任何區別),現在if條件始終為假。 同樣,如果oBtn.BackgroundlColorBrushes[i]都是#FFFF0000

Equals()返回false的原因是這是兩個完全不同的引用,它們恰好具有相同的Color屬性。

如果要比較兩個SolidColorBrushes,建議您使用IEqualityComparer接口,如下所示:( source )。

public class SolidColorBrushComparer : IEqualityComparer<SolidColorBrush>
{      
    public bool Equals(SolidColorBrush x, SolidColorBrush y)
    {
        // If you do not care about opacity, disregard it.
        return x.Color == y.Color && 
            x.Opacity == y.Opacity;
    }

    public int GetHashCode(SolidColorBrush obj)
    {
        return new { C = obj.Color, O = obj.Opacity }.GetHashCode();
    }
}

然后,可以在循環中使用它,如下所示:

foreach (var oBtn in lClickedButtons)
            {
                for (var i = 0; i < lColorBrushes.Count; i++)
                {
                    if (new SoldiColorBrushComparer().Equals(oBtn.Background, lColorBrushes[i]))
                    {
                        //oBtn gets cool stuff
                    }
                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM