在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;