所以我有一个颜色选择器。用户可以使用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