在自定义按钮渲染器(Xamarin.Android)中获取渲染的类Button的实例(在Xamarin.Forms内部)

问题描述 投票:0回答:1

我的代码中有简单的自定义按钮:

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对象的字段?

xamarin xamarin.forms xamarin.android
1个回答
1
投票

Control是呈现您的CustomButton的本机控件。您正在寻找的是属性Element,它表示您的Xamarin.Forms CustomButton

OnElementChanged内,它可以作为e.NewElement使用。

if (e.NewElement is CustomButton customButton 
    && customButton.State) 
{
    Control.SetBackgroundColor(global::Android.Graphics.Color.LightGray);  
}  
© www.soinside.com 2019 - 2024. All rights reserved.