Несколько ступенчатых ползунков в Xamarin.Forms

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

Это мой конструктор:

 public FeedbackPage ()
        {
            InitializeComponent ();

            Feedback = new Feedback();

            StepValue = 1.0;

            SliderValueVak.ValueChanged += OnSliderValueChanged;
            SliderValueUitleg.ValueChanged += OnSliderValueChanged;

            this.BindingContext = this;
        }

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

void OnSliderValueChanged(object sender, ValueChangedEventArgs e)
        {
            var newStep = Math.Round(e.NewValue / StepValue);

            SliderValueVak.Value = newStep * StepValue;
            SliderValueUitleg.Value = newStep * StepValue;
        }

Но теперь, если я использую один слайдер, меняются оба значения ползунка, потому что я даю им одинаковое значение. Есть ли способ использовать оператор if или swich, чтобы узнать, какое значение ползунка изменено?

Всего 2 ответа


sender - это элемент управления, который активировал событие. Просто примените его к правильному типу, и тогда вы узнаете, какой слайдер был источником

void OnSliderValueChanged(object sender, ValueChangedEventArgs e)
    {
        var newStep = Math.Round(e.NewValue / StepValue);

        var slider = (Slider)sender;
        slider.Value = newStep * StepValue;
    }

Как сказал Джейсон, отправитель - это элемент управления, который активировал событие. Но если вы хотите сделать еще несколько. Вы можете определить подкласс Slider

class MySlider:Slider
{
    public readonly int tag;
    public MySlider()
    {

    }

    public MySlider(int tag)
    {
        this.tag = tag;
    }

}

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

SliderValueVak = new MySlider(10);
SliderValueUitleg = new MySlider(20);

OnSliderValueChanged метод OnSliderValueChanged

void OnSliderValueChanged(object sender, ValueChangedEventArgs e)
{
   var newStep = Math.Round(e.NewValue / StepValue);

   MySlider slider = (MySlider)sender;

   if(slider.tag==10)// source is SliderValueVak
    {
      SliderValueVak.Value = newStep * StepValue;
      // do some thing more
    }

   else if(slider.tag == 20) //source is SliderValueUitleg
    {
      SliderValueUitleg.Value = newStep * StepValue;
      // do some thing more
    }

  }

Есть идеи?

10000