切换IOS Xamarin Forms时如何更改切换按钮的颜色?自定义渲染将只设置一次颜色:
Xamarin forms toggle button default color on IOS
切换开关时不会更改。同样如果在AppDelegate.cs中设置值,它只会执行一次。我需要这个:
在IOS中唯一可能的用途:
UISwitch.Appearance.ThumbTintColor = UIColor.Brown;
UISwitch.Appearance.OnTintColor = UIColor.Red;
但如果我的开关在PCL项目中,我如何访问该字段,并用于Xamarin Forms。
您仍然可以在自定义渲染器中执行此操作。只需听一下开关的ValueChanged事件,就可以检查它是打开还是关闭,并更新颜色。
例如,在iOS项目的自定义切换渲染器类中:
protected override void OnElementChanged(ElementChangedEventArgs<Switch> 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<Switch> 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;