Получить экземпляр визуализированного класса Button (внутри Xamarin.Forms) внутри пользовательского средства визуализации кнопок (Xamarin. Android) - PullRequest
0 голосов
/ 04 мая 2020

У меня есть простая пользовательская кнопка в моем коде:

public class CustomButton : Button
{
    public bool State { get; set; } = false;
}

и ее средство визуализации:

public class CustomButtonRenderer : Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer
{
    public CustomButtonRenderer(Context context) : base(context) { }
    ObjectAnimator objectAnimator;

    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
    {
        base.OnElementChanged(e);

        if (Control != null)
        {
            var button = (Control as Android.Widget.Button);
            (Control as Android.Widget.Button).Touch += Control_Touch;

            // this don't works:
            if (Control.State) Control.SetBackgroundColor(global::Android.Graphics.Color.LightGray);                
        }
    }
 }

И я хочу получить доступ к State свойству CustomButton экземпляр внутри моего CustomButtonRenderer класса. Но я не могу, потому что Control имеет тип Android.Support.V7.Widget.AppCompatButton, абсолютно не связанный с моим CustomButton классом.

Есть ли способы получить доступ к полям визуализированного объекта CustomButton внутри его средства визуализации

1 Ответ

2 голосов
/ 04 мая 2020

Control - это нативный элемент управления, отображающий ваш CustomButton. То, что вы ищете, это свойство Element, которое представляет ваш Xamarin.Forms CustomButton.

В пределах OnElementChanged оно доступно как e.NewElement.

if (e.NewElement is CustomButton customButton 
    && customButton.State) 
{
    Control.SetBackgroundColor(global::Android.Graphics.Color.LightGray);  
}  
...