我需要一个滑块事件,只有当用户结束触摸控件时它才会触发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我需要一个滑块事件,只有当用户结束触摸控件时它才会触发相关的知识,希望对你有一定的参考价值。
我的需求:我需要一个滑块事件,它只有在用户结束触摸控件时才会触发
定制控制:
public class ExtendedSlider : Slider { public event EventHandler StopedDraging; public void OnStopedDrag() { if (StopedDraging != null) { StopedDraging(this,EventArgs.Empty); } } }
用户界面:
<ListView.ItemTemplate >
<Label Text="{Binding luminaireLevel, StringFormat='{0:F0}%'}" />
<PCAControls:ExtendedSlider Maximum="100" Minimum="25"
Value="{Binding luminaireLevel, Mode=TwoWay}"
LuminaireID="{Binding id}"
StopedDraging="ExtendedSlider_StopedDraging"
/>
</ListView.ItemTemplate>
渲染器:
class ExtendedSliderRenderer : SliderRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Slider> e) { base.OnElementChanged(e); if (Control != null) { var slider = (PCA.CustomControls.ExtendedSlider)e.NewElement; Control.Max = (int)(slider.Maximum - slider.Minimum); Control.Progress = (int)(slider.Value - slider.Minimum); Control.StopTrackingTouch += Control_StopTrackingTouch; } } void Control_StopTrackingTouch(object sender, SeekBar.StopTrackingTouchEventArgs e) { var slider = (PCA.CustomControls.ExtendedSlider)Element; slider.Value = Control.Progress + slider.Minimum; slider.OnStopedDrag(); } }
问题是:我实现了我的预期,但是用户停止拖动滑块或在滑块之间点击,luminaireLevel(vewmodel属性)正在更新,但滑块始终显示完整的进程
答案
当您的渲染器更改ios控件的值时,“绑定”不是两个=方式。要实现您想要的功能,您需要将Xamarin.Forms Slider绑定到viewmodel中的值,然后在渲染器中更改viewmodel中的值。
如果绑定所有属性(最小值,最大值,值,进度),则会更容易
以上是关于我需要一个滑块事件,只有当用户结束触摸控件时它才会触发的主要内容,如果未能解决你的问题,请参考以下文章