我对多个阶梯状滑块有疑问。我正在尝试创建多个阶梯状滑块,但是问题是我不知道如何识别更改了哪个滑块值
这是我的构造函数:
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来查看更改了哪个滑块值?
答案 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
}
}