代码之家  ›  专栏  ›  技术社区  ›  Brum

Xamarin.窗体中的多个阶梯滑块

  •  2
  • Brum  · 技术社区  · 6 年前

    这是我的构造器:

     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;
            }
    

    2 回复  |  直到 6 年前
        1
  •  3
  •   Jason    6 年前

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

    void OnSliderValueChanged(object sender, ValueChangedEventArgs e)
        {
            var newStep = Math.Round(e.NewValue / StepValue);
    
            var slider = (Slider)sender;
            slider.Value = newStep * StepValue;
        }
    
        2
  •  2
  •   Lucas Zhang    6 年前

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