【问题标题】:How can I use a custom renderer to set the color of a switch by default?如何使用自定义渲染器默认设置开关的颜色?
【发布时间】:2018-07-07 16:09:47
【问题描述】:

我目前有这个自定义渲染器来设置开关的颜色以响应参数。

class ExtSwitchRenderer : SwitchRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Switch> e)
    {
        base.OnElementChanged(e);

        if (e.OldElement != null || e.NewElement == null) return;

        ExtSwitch s = Element as ExtSwitch;

        this.Control.OnTintColor = s.SwitchOnColor.ToUIColor();

    }
}

我想修改这个,所以我不需要指定参数,如 OnColor="Red"。所以不会有 OnElementChanged 事件

有人可以建议我如何使用渲染器中的代码而不是在 iOS 中我的 XML 的参数行将 OnColor 设置为红色吗?

还有其他我可以覆盖的事件吗?

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    如果您现在将项目中的 Xamarin Forms 版本升级为可绑定属性(到 3.1):

     <Switch OnColor="Red" />
    

    你也可以修改你的渲染器,设置颜色,不管绑定:

     Control.OnTintColor = UIColor.FromRGB (204, 153, 255);
    

    或者,在 AppDelegate 中,应用于所有 Switch:

    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
    
      // switch
        UISwitch.Appearance.OnTintColor = UIColor.FromRGB(0x91, 0xCA, 0x47); // green
        // required Xamarin.Forms code
        Forms.Init ();
        LoadApplication (new App ());
        return base.FinishedLaunching (app, options);
    }
    

    【讨论】:

    • 我试过了,但是只是对轨道颜色进行了着色,看起来很糟糕:-(在我查看开关时在 Android 中。那 AppDelegate 仅适用于 iOS 吗?
    • AppDelegate 仅适用于 iOS。你的问题是关于 iOS 的。
    • 是的,但我只想为那些我使用渲染器的开关这样做。例如,一个渲染器会使它们变为红色,而另一个渲染器会使它们变为绿色。只是真的想知道是否有一些方法可以覆盖我可以设置开关颜色的位置,而不是 OnElementChanged 方法。
    • 就像我的回复一样。如果您更新 xamarin.forms 版本,则有一个可绑定的颜色属性。
    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 2021-10-05
    • 2010-12-04
    • 2020-01-14
    • 2020-09-29
    • 1970-01-01
    相关资源
    最近更新 更多