0

这是我的示例代码。

Entry entry= new Entry();
entry.BackgroundColor=Color.Teal;
entry.Enabled=false;

您可以看到条目背景颜色在禁用状态下没有改变。这是实际行为吗?在那种情况下,如何区分进入控制的启用和禁用状态。

DisabledEntryImage

4

1 回答 1

1

这是默认行为。除非控件具有实际属性,否则开箱即用不支持为禁用项目设置样式。但是您可以通过几种不同的方式轻松实现类似的功能。一种方法是创建一个Entry具有可绑定属性的自定义,称为DisabledStyle. 然后,您可以为禁用的Entry字段设置自定义样式。

选项 1:自定义条目

public class ExtendedEntry : Entry
{
  private Style normalStyle;

  public Style DisabledStyle
  {
    get { return (Style)GetValue(DisabledStyleProperty); }
    set { SetValue(DisabledStyleProperty, value); }
  }

  public static readonly BindableProperty DisabledStyleProperty = BindableProperty.Create(nameof(DisabledStyle), typeof(Style), typeof(ExtendedEntry), null, BindingMode.TwoWay, null, (obj, oldValue, newValue) => { });

  public ExtendedEntry()
  {
      normalStyle = this.Style;
      this.PropertyChanged += ExtendedEntry_PropertyChanged;
  }

  private void ExtendedEntry_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
  {
    if (e.PropertyName == nameof(IsEnabled) && this.DisabledStyle != null)
    {
      if (this.IsEnabled)
        this.Style = normalStyle;
      else
        this.Style = DisabledStyle;
    }
  }
}

选项 2:触发器

另一种选择是使用触发器:

<Entry Placeholder="enter name">
    <Entry.Triggers>
        <Trigger TargetType="Entry"
             Property="IsEnabled" Value="True">
            <Setter Property="BackgroundColor" Value="Yellow" />
        </Trigger>
    </Entry.Triggers>
</Entry>
于 2017-05-29T09:57:16.387 回答