Xamarin.Forms中的多个阶梯状滑块

时间:2018-10-28 13:37:51

标签: c# xamarin events 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 case来查看更改了哪个滑块值?

2 个答案:

答案 0 :(得分:2)

sender是触发事件的控件。只需将其转换为正确的类型,然后您就会知道是哪个滑块

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

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

答案 1 :(得分:2)

正如jason所说,发送者是触发事件的控件。但是,如果您想做更多事情,可以定义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

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
    }

  }