【发布时间】:2010-11-06 09:49:11
【问题描述】:
所以我有一个颜色选择器。用户可以使用 RGB 或 HSB 选择颜色。每个值都有滑块/属性。例如,当用户设置红色时,我将计算 HSB 值以反映新的颜色值。当用户设置 Hue 时,RGB 值将从 HSB 值重新计算。但是看到那里有一个循环。当我设置 RGB 时,它必须重新计算 HSB 值,到目前为止还可以,但这也意味着 HSB 值会改变,导致 RGB 值再次重新更新。我认为这是问题所在,但我该如何解决?
更新:一种可能的解决方案
我使用的一个可能的解决方案是标记,虽然不是很可读,但它确实有效。基本上,当我设置属性时,我也会设置一个标志来表示我正在设置一个值
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 的解决方案
【问题讨论】: