【问题标题】:How to set the value of a slider without triggering the ValueChanged event again in C# in Xamarin?如何在 Xamarin 中的 C# 中设置滑块的值而不再次触发 ValueChanged 事件?
【发布时间】:2015-01-22 18:55:07
【问题描述】:

我需要更新滑块控件,因为我正在以 5 的步骤实现值。但是,当我在 Value changed 事件中设置值时,该事件会再次触发。如何在 ValueChanged 事件中设置滑块的值而不再次触发它?

                    partial void sliTip_ValueChanged(UISlider sender)
                    {
                        float newStep = (float)Math.Round((sender.Value) / _stepValue);

                        sender.Value = newStep * _stepValue;  // <-------   triggers event again
                        //sender.SetValue(newStep * _stepValue, false);
                        //NSNumber number = newStep * _stepValue;
                        //sender.SetValueForKey(number, new NSString("Value"));

                        this.lblTip.Text = sender.Value.ToString() + "% tip";
                    }

在原生 Objective-c 中,您可以很好地设置 UISlider 的值,而不会触发事件:

                    slider setValue:self.tip;

【问题讨论】:

    标签: c# ios xamarin slider


    【解决方案1】:

    我不认为你可以。但是如果你只想阻止无限递归的发生,那应该是相当简单的

    partial void sliTip_ValueChanged(UISlider sender)
    {
      float newStep = (float)Math.Round((sender.Value) / _stepValue);
      float newValue = newStep * _stepValue;
    
      if (sender.Value != newValue) {
        sender.Value = newValue;
        this.lblTip.Text = sender.Value.ToString() + "% tip";
      }
    }
    

    【讨论】:

      【解决方案2】:

      我最终使用了一个 TouchUpInside 事件,该事件仅在用户松开滑块时触发。 TouchUpInside 事件当然只会在用户将手指从触摸屏上移开时触发一次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-01
        • 1970-01-01
        相关资源
        最近更新 更多