在IOS Xamarin Forms中更改切换颜色

切换IOS Xamarin Forms时如何更改切换按钮的颜色? 自定义渲染只会将颜色设置一次:

Xamarin在IOS上形成切换按钮默认颜色

当Switch切换时,它不会被改变。 同样如果在AppDelegate.cs中设置值,它只会执行一次。 我需要这个:

在此处输入图像描述 在此处输入图像描述

在IOS中它唯一可能使用:

UISwitch.Appearance.ThumbTintColor = UIColor.Brown; UISwitch.Appearance.OnTintColor = UIColor.Red; 

但是如果我的开关在PCL项目中,我如何访问该字段,并且它用于Xamarin Forms。

您仍然可以在自定义渲染器中执行此操作。 只需听一下开关的ValueChanged事件,就可以检查它是打开还是关闭,并更新颜色。

例如,在iOS项目的自定义切换渲染器类中:

 protected override void OnElementChanged(ElementChangedEventArgs e) { base.OnElementChanged(e); Control.ValueChanged += Control_ValueChanged; } private void Control_ValueChanged(object sender, EventArgs e) { if (Control.On) { // set on colors } else { // set off colors } } 

我解决了这个问题:

 public class CustomSwitchRenderer: SwitchRenderer { protected override void OnElementChanged(ElementChangedEventArgs e) { Element.Toggled += ElementToggled; base.OnElementChanged(e); if (Control != null) { UpdateUiSwitchColor(); } } private void ElementToggled(object sender, ToggledEventArgs e) { UpdateUiSwitchColor(); } private void UpdateUiSwitchColor() { var temp = Element as Switch; if (temp.IsToggled) { Control.ThumbTintColor = Color.FromHex(ColorConstants.BlueHex).ToUIColor(); Control.OnTintColor = Color.FromHex(ColorConstants.OblueLightHex).ToUIColor(); } else { Control.ThumbTintColor = Color.FromHex(ColorConstants.GrayHex).ToUIColor(); } } } 

所以,每当执行Toggle时我都会激活事件:

 Element.Toggled += ElementToggled;