Пользовательский рендерер слайдера Xamarin DragCompleted событие - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь включить функцию визуализации IOS для управления ползунком. Из-за обтекания класса SlideriOS событие не запускается, и мне нужно событие DragCompleted. У кого-нибудь есть идея, как вызвать / направить событие в элемент управления?

[assembly: ExportRenderer(typeof(CustomGradientSlider), typeof(CustomGradientSliderRenderer))]
namespace HealMate.iOS.Renderers
{
    public class CustomGradientSliderRenderer : SliderRenderer
    {
        public CGColor StartColor { get; set; }
        public CGColor CenterColor { get; set; }
        public CGColor EndColor { get; set; }
        private UIImage GradImage { get; set; }
        public string SelectionColor1 { get; set; }
        public string SelectionColor2 { get; set; }

    protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
    {

        if (Control == null)
        {
            var customSlider = e.NewElement as CustomGradientSlider;
            StartColor = customSlider.StartColor.ToCGColor();
            CenterColor = customSlider.CenterColor.ToCGColor();
            EndColor = customSlider.EndColor.ToCGColor();


              var slider = new SlideriOS
            {
                Continuous = true,

                Height = (nfloat)customSlider.HeightRequest
            };

            SetNativeControl(slider);
            Control.ValueChanged += OnControlValueChanged;

        }

        base.OnElementChanged(e);
    }

...

   public class SlideriOS : UISlider
    {
        public nfloat Height { get; set; }

        public override CGRect TrackRectForBounds(CGRect forBounds)
        {
            var rect = base.TrackRectForBounds(forBounds);
            return new CGRect(rect.X, rect.Y, rect.Width, Height);
        }
        }
}

Как я могу запустить событие DragCompleted для элемента управления ползунка? Спасибо!

1 Ответ

1 голос
/ 10 октября 2019

Есть несколько событий , которые можно вызвать в UISlider :

  • TouchDragExit : возбужденоСобытия TouchDragExit.
  • TouchUpInside : вызывается при событиях TouchUpInside.
  • TouchUpOutside : вызывается при событиях TouchUpOutside.

Вы можете вызвать одного из них, чтобы попробовать следующее:

Control.TouchDragExit += Slider_TouchDragExit;

private void Slider_TouchDragExit(object sender, EventArgs e)
{
    throw new NotImplementedException();
}

================================== Обновление ==========================================

После тестирования в локальном проекте, выше трех методов работает только TouchUpInside, и не найти причину, по которой другие методы не работают в iOS рендерере. Я также тестирую методы рендерера в Android, это работает. Это странное явление.

Тем не менее, я нашел обходной путь для вызова методов в качестве функции перетаскивания.

[assembly: ExportRenderer(typeof(CustomSlider), typeof(CustomSliderRenderer))]
namespace App8.iOS
{
    public class CustomSliderRenderer : SliderRenderer
    {

    protected override void OnElementChanged(ElementChangedEventArgs<Slider> e)
    {
        base.OnElementChanged(e);

        if (null != Control)
        {
            CustomSlider customSlider = (CustomSlider)e.NewElement;

            customSlider.DragCompleted += CustomSlider_DragCompleted;

        }
    }


    private void CustomSlider_DragCompleted(object sender, EventArgs e)
    {
        Console.WriteLine("------CustomSlider_DragCompleted-------");
    }

}

Здесь, CustomSlider - мой пользовательскийСлайдер в Xamarin.Forms. Если позже найдите причину, по которой TouchDragExit не просыпается, обновите здесь.

...