更改禁用按钮中的按钮文本颜色(Xamarin.Forms)

我需要在禁用按钮时更改按钮的文本颜色,我已经为iOS创建了一个自定义渲染器,为Android创建了一个。 iOS工作得很好,因为android没有改变颜色,我也通过样式创建了触发器,也没有解决。

如何为Xamarin.Forms进行颜色交换工作?

Android渲染器:

[assembly: ExportRenderer(typeof(Button), typeof(MyButtonRenderer))] namespace xxxxxx.Droid.Renderers { public class MyButtonRenderer : ButtonRenderer { protected override void OnElementChanged(ElementChangedEventArgs

根据我的命令的CanExecute更改此状态更改,这将是应用的默认样式。

这两种方式都没有解决

对于Androir:

 [assembly: ExportRenderer(typeof(Button), typeof(MyButtonRenderer))] namespace Forms.Droid.Renderers { public class MyButtonRenderer : ButtonRenderer { public MyButtonRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs 

对于iOS:

 [assembly: ExportRenderer(typeof(Button), typeof(MyButtonRenderer))] namespace Forms.iOS.Renderers { public class MyButtonRenderer : ButtonRenderer { protected override void OnElementChanged(ElementChangedEventArgs 

如果CanExecute按预期工作,则应相应地更新IsEnabled属性。 您可以通过OnElementPropertyChanged方法侦听此属性值更改。

 public class MyButtonRenderer : ButtonRenderer { .... protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); if (e.PropertyName == nameof(Button.IsEnabled)) { Element.TextColor = Element.IsEnabled ? Color.White : Color.Gray; } } ... } 

因为android没有改变颜色,我也通过样式创建了触发器,也没有解决。

有一些可能导致问题的可能性:

  1. 最有可能的是,您使用错误的Button类型定义渲染器,Droid项目中有Android.widget.ButtonXamarin.Forms.Button ,定义渲染器所需的是Xamarin.Forms.Button

     [assembly:ExportRenderer(typeof(Xamarin.Forms.Button), typeof(MyButtonRenderer))] namespace xxxxxxxxx.Droid { ... } 
  2. 您不需要设置e.OldElement.TextColor = Color.White; 。 实际上当时e.OldElement可能为null,因为它代表旧元素。 所以只需删除此行。 并且代码将正常工作。