所以我有一個顏色選擇器。用戶可以使用RGB或HSB選擇顏色。每個值都有滑塊/屬性。例如,當用戶設置紅色時,我將計算HSB值以反映新的顏色值。當用戶設置Hue時,RGB值將從HSB值重新計算。但看到那裏有一個循環。當我設置RGB時,它必須重新計算HSB值,至此確定,但這也意味着HSB值將會改變,從而導致RGB值被重新更新。我認爲這是問題所在,但我該如何解決這個問題?需要幫助防止無限循環。設置屬性
UPDATE:一種可能的方案
一個可能的解決方案,我所用的是標誌,不是很可讀壽,但它的作品。基本上,當我設置的屬性,我還設置了標誌,以表示我設置的值
public float Hue {
get { return _hue; }
set
{
if (_hue == value)
return;
CurrentlySetting = (CurrentlySetting.HasValue) ? CurrentlySetting : ColorType.HSB;
_hue = value;
NotifyPropertyChanged("Hue");
NotifyPropertyChanged("Color");
RecalculateRGB();
CurrentlySetting = (CurrentlySetting == ColorType.HSB) ? null : CurrentlySetting;
}
}
當我「重新計算」的價值觀,我檢查了這一點,確保我目前沒有設置它們
protected void RecalculateRGB(Color color = new Color())
{
if (CurrentlySetting == ColorType.RGB) // prevent stackoverflow
return;
if (color == new Color())
color = HSBColorHelper.FromAHSB(255, Hue, Saturation, Brightness);
Red = color.R;
Green = color.G;
Blue = color.B;
}
不是很簡單的,我還是喜歡@Marc Gravell的,解決方案
我想在通過字段設置屬性後添加'NotifyPropertyChanged()'也應該運行 – 2010-11-06 12:22:37
@Jiewmeng所以那樣做... – 2010-11-06 12:58:27