Итак, у меня есть палитра цветов. Пользователи могут выбирать цвета, используя 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's, решение