Как я могу изменить цвет строки записи на основе условия в xamarin.forms

#c# #xamarin #xamarin.forms

#c# #xamarin #xamarin.forms

Вопрос:

введите описание изображения здесь

Итак, я выполняю некоторые проверки своих записей, и я хотел бы изменить цвет на красный, если значение недопустимо.

Есть ли способ сделать это в xamarin прямо сейчас?

Я знаю, что есть средство визуализации для постоянного изменения цвета, но я просто хочу изменить его на основе условия и оставить его черным, когда все в порядке.

Спасибо.

Комментарии:

1. Средство визуализации не обязательно должно делать это постоянно, его можно настроить для выполнения в определенных событиях. Если вы используете средство визуализации материалов и оно соответствует вашим требованиям, вы можете просто изменить цвет текста. В средстве визуализации визуальных материалов подчеркивание соответствует цвету текста.

Ответ №1:

Вы могли бы перезаписать OnElementPropertyChanged метод в вашем CustomRenderer для достижения этой цели.

Например:

для Android:

 [assembly: ExportRenderer(typeof(Entry), typeof(UnderLineEntry))]
namespace EntryCa.Droid
{
  class UnderLineEntry : EntryRenderer
  {
    public UnderLineEntry(Context context) : base(context)
    {

    }
    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);

        if (Control == null || e.NewElement == null) return;

        Control.BackgroundTintList = ColorStateList.ValueOf(Android.Graphics.Color.Black);
    }

    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);
        if (e.PropertyName == Entry.TextProperty.PropertyName)
        {
            if (Control.Text.Length > 6)  //this is your condition(For example, here is the length of the text content)
            {
                Control.BackgroundTintList = ColorStateList.ValueOf(Android.Graphics.Color.Red);
            }
            else
            {
                Control.BackgroundTintList = ColorStateList.ValueOf(Android.Graphics.Color.Black);
            }
        } 
    }
  }
}
  

ios похожа на Android, также измените ее в OnElementPropertyChanged методе, если хотите, я мог бы привести вам пример.

для ios.

 [assembly: ExportRenderer(typeof(Entry), typeof(MyEntryRenderer))]
namespace EntryCa.iOS
{
  public class MyEntryRenderer : EntryRenderer
  {
    private CALayer _line;

   public override void LayoutSubviews()
    {
        base.LayoutSubviews();

        Control.BorderStyle = UITextBorderStyle.None;

        _line = new CALayer
        {
            BackgroundColor = UIColor.Black.CGColor,
            Frame = new CGRect(0, Frame.Height, Frame.Width, 1f)
        };

        Control.Layer.AddSublayer(_line);
    }

    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);
        if (e.PropertyName == Entry.TextProperty.PropertyName)
        {
            if (Control.Text.Length > 6)
            {
                _line.RemoveFromSuperLayer();
                _line = new CALayer
                {
                    BackgroundColor = UIColor.Red.CGColor,
                    Frame = new CGRect(0, Frame.Height, Frame.Width, 1f)
                };

                Control.Layer.AddSublayer(_line);
            }
            else
            {
                _line.RemoveFromSuperLayer();
                _line = new CALayer
                {
                    BackgroundColor = UIColor.Black.CGColor,
                    Frame = new CGRect(0, Frame.Height, Frame.Width, 1f)
                };

                Control.Layer.AddSublayer(_line);
            }
        }
    }
  }
}
  

Комментарии:

1. Спасибо за ответ, смогу ли я использовать это, если я выполню свою проверку с помощью FluentValidation ? Потому что у меня есть некоторые проверки, сделанные в коде моего xaml, поэтому я буду работать, но остальные мои проверки выполняются в ViewModel, и я использую FluentValidaiton. Спасибо

2. Чжу Также, могу ли я получить версию этого для iOS, пожалуйста? Спасибо 🙂

3. @codetime хорошо, я дам вам коды для ios. (но я еще не тестировал это).

4. Хорошо, спасибо, вы знаете, есть ли способ сделать это так, как я объяснил в своем первом комментарии? Спасибо

5. Хорошо, потому что у меня есть некоторая проверка, которая также не выполнена в исходном коде (с плавной проверкой), поэтому нет способа изменить цвет строки, если проверка не выполнена в исходном коде, верно?

Ответ №2:

Чтобы изменить строку, необходимо использовать пользовательский рендерер, подобный этому.

Или просто скройте строку в пользовательском рендерере и подделайте строку на странице, тогда вы сможете управлять цветом с помощью триггера данных.

В качестве альтернативы, как насчет добавления рамки или изменения цвета фона вместо записи?

Комментарии:

1. он специально спросил о цвете подчеркивания, а не о цвете текста

2. Спасибо, Джейсон. Извините за мое чтение. Отредактировал ответ.