[英]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.Background
和lColorBrushes[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.