c# - 在 Xamarin 中的 IsEnabled 上更改按钮的 TextColor
问题描述
在 Xamarin App 中,我想更改TextColor
. 只有从.Button
IsEnabled = false
Picker
@Leo Zhu - MSFT => https://stackoverflow.com/a/64854260/14139029有一个解决方案,非常有帮助,但在这种情况下不起作用。
.xml
<Button
x:Name="FormButton"
IsEnabled="False"
TextColor="#4DABFE"
Text="Submit"
Command={Binding FormButtonCommand}>
<Button.Triggers>
<MultiTrigger TargetType="Button">
<MultiTrigger.Conditions>
<BindingCondition Binding="{Binding SelectedState,
Converter={StaticResource stringNullOrEmptyValueBoolConverter }}" Value="false" />
<BindingCondition Binding="{Binding SelectedCity,
Converter={StaticResource stringNullOrEmptyValueBoolConverter }}" Value="false" />
</MultiTrigger.Conditions>
<Setter Property="IsEnabled" Value="True" />
</MultiTrigger>
</Button.Triggers>
</Button>
视图模型.cs
public ICommand FormButtonCommand => new Command(async (formbutton) =>
{
if (SelectedCity == "Tokyo")
{
// Code
}
else if (SelectedCity == "Moscow")
{
// Code
}
}, (x) => false);
解决方案
好的,同样的道理,你设置了Button的IsEnable
属性,当它为false时,它会以默认样式显示。
这是针对这种情况的解决方案(也适用于最后一种情况):</p>
在两个平台上创建一个自定义 ButtonRenderer:
对于安卓:</p>
[assembly: ExportRenderer(typeof(Button), typeof(CustomButtonRenderer))]
namespace Your namepace
{
class CustomButtonRenderer :ButtonRenderer
{
public CustomButtonRenderer(Context context):base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
base.OnElementChanged(e);
if (Control != null) SetColors();
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs args)
{
base.OnElementPropertyChanged(sender, args);
if (args.PropertyName == nameof(Button.IsEnabled)) SetColors();
}
private void SetColors()
{
Control.SetTextColor(Element.IsEnabled ? Color.FromHex("004B87").ToAndroid() : Color.FromHex("4DABFE").ToAndroid());
Control.SetBackgroundColor(Element.IsEnabled ? Color.FromHex("222222").ToAndroid() : Color.FromHex("FFFFFF").ToAndroid());
}
}
}
对于 iOS:
[assembly: ExportRenderer(typeof(Button), typeof(CustomButtonRenderer))]
namespace Your namepace
{
public class CustomButtonRenderer: ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> args)
{
base.OnElementChanged(args);
if (Control != null) SetColors();
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs args)
{
base.OnElementPropertyChanged(sender, args);
if (args.PropertyName == nameof(Button.IsEnabled)) SetColors();
}
private void SetColors()
{
Control.SetTitleColor(Element.IsEnabled ? Color.FromHex("004B87").ToUIColor() : Color.FromHex("4DABFE").ToUIColor(), Element.IsEnabled ? UIControlState.Normal : UIControlState.Disabled);
Control.BackgroundColor = Element.IsEnabled ? Color.FromHex("222222").ToUIColor() : Color.FromHex("FFFFFF").ToUIColor();
}
}
}
推荐阅读
- c# - 使用 c# 自动化测试 Selenium
- r - 是否有函数可以找到一组行的累积总和/滚动总和
- python-3.x - 将点连接到 matplotlib 散点图中的中心
- flutter - 覆盖抽象类 Dart 中的最终属性
- python - 根据条件关闭 Python 中的任务
- python - 使用python从Web应用程序标准化json输出分析的最佳方法是什么?
- python - Sample_weights Keras 模型 - IndexError:数组索引过多
- javascript - 这一系列的请求是并行执行的吗?
- logstash - Logstash Http 输出中的 retry_non_idempotent
- javascript - 如何从 DOM 获取变量到 puppeteer