更改禁用按钮中的按钮文本颜色(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没有改变颜色,我也通过样式创建了触发器,也没有解决。
有一些可能导致问题的可能性:
-
最有可能的是,您使用错误的
Button
类型定义渲染器,Droid项目中有Android.widget.Button
和Xamarin.Forms.Button
,定义渲染器所需的是Xamarin.Forms.Button
:[assembly:ExportRenderer(typeof(Xamarin.Forms.Button), typeof(MyButtonRenderer))] namespace xxxxxxxxx.Droid { ... }
-
您不需要设置
e.OldElement.TextColor = Color.White;
。 实际上当时e.OldElement
可能为null,因为它代表旧元素。 所以只需删除此行。 并且代码将正常工作。