【问题标题】:Retain color of Switch when disabeld禁用时保留开关的颜色
【发布时间】:2017-09-19 22:01:21
【问题描述】:

我在 xamarin 表单中使用 Switch。当我切换时,颜色为粉红色为真,灰色为假。

当我禁用开关时,我不希望用户切换。然后颜色变为灰色。

如何保留 Switch 的颜色。当它被禁用并且它是 true 时,它​​应该是默认颜色而不是灰色,

您能否建议我如何实现这一目标。

<Switch IsToggled="True" IsEnabled="False"/>

谢谢 饶

【问题讨论】:

    标签: c# xaml xamarin xamarin.forms


    【解决方案1】:

    我对这个问题进行了一些调查,我可以看到两种解决方案:

    简单的方法

    使用私有布尔变量而不是使用IsEnabled 属性。然后当点击事件被处理后,用变量检查开关的状态。

    艰难的路

    覆盖 Switch 控件以获取此行为。你可以关注this guide

    【讨论】:

      【解决方案2】:

      SwitchXamarin.Forms 可以看出,目前没有指定颜色的选项。最后,您必须为iOSAndroid 创建自己的渲染器。

      安卓

      基本上,您需要做的是覆盖OnElementChangedOnCheckChanged 事件并检查ControlChecked 属性。之后,您可以设置ControlThumbDrawable 并使用您要应用的颜色执行SetColorFilter。这样做虽然需要 Android 5.1+。举个例子here

      您还可以创建使用StateListDrawable 并为StateCheckedStateEnabled 添加新的ColorDrawables,最后还可以添加一个默认值。 Android 4.1+ 支持此功能。 here 详细提供了使用StateListDrawable 的示例。

      iOS

      iOS 稍微简单一些。只需创建自己的SwitchRenderer,覆盖OnElementChanged 事件并设置OnTintColorThumbTintColor

      我希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        在这种情况下,您需要为您的控件制作自定义渲染器,并在它更改时设置颜色:

        class CustomSwitchRenderer : SwitchRenderer
        {
            protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Switch> e)
            {
                base.OnElementChanged(e);
        
                this.Control.ThumbDrawable.SetColorFilter(this.Control.Checked ? Color.DarkGreen : Color.Red, PorterDuff.Mode.SrcAtop);
                this.Control.TrackDrawable.SetColorFilter(this.Control.Checked ? Color.Green : Color.Red, PorterDuff.Mode.SrcAtop);
        
                this.Control.CheckedChange += this.OnCheckedChange;
            }
        
            private void OnCheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
            {
                this.Control.ThumbDrawable.SetColorFilter(this.Control.Checked ? Color.DarkGreen : Color.Red, PorterDuff.Mode.SrcAtop);
                this.Control.TrackDrawable.SetColorFilter(this.Control.Checked ? Color.Green : Color.Red, PorterDuff.Mode.SrcAtop);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2016-07-25
          • 2014-11-06
          • 1970-01-01
          • 2019-07-20
          • 1970-01-01
          • 2018-02-08
          • 1970-01-01
          • 2017-12-14
          • 2012-03-09
          相关资源
          最近更新 更多