微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin Forms 自定义 Switch 时 Toggled 不能被触发的问题解决方案

直接上代码

 1 using Android.Graphics;
 2 using Android.Widget;
 3 using DCMS.Client.Droid.Renderer;
 4 using Xamarin.Forms;
 5 using Xamarin.Forms.Platform.Android;
 6 
 7 [assembly: ExportRenderer(typeof(Xamarin.Forms.Switch), typeof(CustomSwitchRenderer))]
 8 namespace DCMS.Client.Droid.Renderer
 9 {
10     public class CustomSwitchRenderer : SwitchRenderer
11     {
12         private Xamarin.Forms.Switch view;
13 
14         public CustomSwitchRenderer(Android.Content.Context context) : base(context) { }
15 
16         protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Switch> e)
17         {
18             //this.Element.Toggled += this.OnElementToggled;
19 
20             base.OnElementChanged(e);
21             if (e.OldElement != null || e.NewElement == null)
22                 return;
23 
24             //if (e.OldElement != null)
25             //    e.OldElement.Toggled -= OnElementToggled;
26 
27             //e.NewElement.Toggled += OnElementToggled;
28 
29             view = (Xamarin.Forms.Switch)Element;
30             if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.JellyBean)
31             {
32                 if (Control != null)
33                 {
34                     if (this.Control.Checked)
35                     {
36                         this.Control.TrackDrawable.SetColorFilter(Xamarin.Forms.Color.FromHex("#6decacec").ToAndroid(), PorterDuff.Mode.SrcAtop);
37                     }
38                     else
39                     {
40                         this.Control.TrackDrawable.SetColorFilter(Xamarin.Forms.Color.FromHex("#6db3b1b3").ToAndroid(), PorterDuff.Mode.SrcAtop);
41                     }
42                     this.Control.CheckedChange += this.OnCheckedChange;
43                     Control.SetTrackResource(Resource.Drawable.track);
44                 }
45             }
46         }
47 
48         private void OnCheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
49         {
50             if (this.Control.Checked)
51             {
52                 this.Control.TrackDrawable.SetColorFilter(Xamarin.Forms.Color.FromHex("#6decacec").ToAndroid(), PorterDuff.Mode.SrcAtop);
53             }
54             else
55             {
56                 this.Control.TrackDrawable.SetColorFilter(Xamarin.Forms.Color.FromHex("#6db3b1b3").ToAndroid(), PorterDuff.Mode.SrcAtop);
57             }
58             Element.IsToggled = Control.Checked;
59         }
60 
61         protected override void dispose(bool disposing)
62         {
63             this.Control.CheckedChange -= this.OnCheckedChange;
64             base.dispose(disposing);
65         }
66 
67     }
68 }

 

效果如下:

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐