Как я могу узнать, кто поднял перенаправленное событие в WPF? - PullRequest
0 голосов
/ 31 декабря 2011

У меня есть ползунок, и я обновляю значение внутри.Кроме того, пользователь может вводить данные для изменения внутреннего параметра.

Вопрос в том, как узнать, кто вызвал событие, пользователя или класс, в котором я меняю slider.value?

В моем случае это обработчик:

    private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
        var slider = sender as Slider;
        if (slider == null) return;

        var col = this.SelectedColor;
        switch ((string)slider.Tag)
        {
            case "Hue": this.SetHue(ValueHue.Value); break; 
            case "Sat": this.SetSatBri(ValueSat.Value, CurrentBri); break;  
            case "Bri": this.SetSatBri(CurrentSat, ValueBri.Value); break;  
            case "R": this.SetColor(Color.FromRgb(Convert.ToByte(ValueR.Value), col.G, col.B)); break;
            case "G": this.SetColor(Color.FromRgb(col.R, Convert.ToByte(ValueG.Value), col.B)); break;
            case "B": this.SetColor(Color.FromRgb(col.R, col.G, Convert.ToByte(ValueB.Value))); break;
        }
}

Функция не работает правильно, если событие не было вызвано пользовательским вводом.Так как я могу это выяснить?

1 Ответ

1 голос
/ 31 декабря 2011

Вы не можете определить, как произошло событие, поэтому вам придется использовать другой подход. Вероятно, наиболее распространенным решением этой проблемы является установка логического поля, которое указывает, что приложение реагирует на конкретное изменение состояния. Например, когда вы обновляете значение внутри:

private bool _settingValue = false;

private void SetValueInternal()
{
  _settingValue = true;
  mySlider.Value = newValue;
  _settingValue = false;
}

Затем вы можете изменить логику в своем вопросе, основываясь на состоянии переменной _settingValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...