【问题标题】:Multiple stepped sliders in Xamarin.FormsXamarin.Forms 中的多个阶梯滑块
【发布时间】:2018-10-28 13:37:51
【问题描述】:

我有一个关于多级滑块的问题。我正在尝试创建多个阶梯滑块,但问题是我不知道如何识别更改了哪个滑块值

这是我的构造函数:

 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 来查看更改了哪个滑块值?

【问题讨论】:

    标签: c# xamarin events xamarin.forms


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      正如 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);
      

      Andin方法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
          }
      
        }
      

      【讨论】:

      • 谢谢!你的遮阳篷也不错,但我只需要杰森所说的。谢谢你!
      猜你喜欢
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多