我的代码中有简单的自定义按钮:
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
对象的字段?
Control
是呈现您的CustomButton
的本机控件。您正在寻找的是属性Element
,它表示您的Xamarin.Forms CustomButton
。
在OnElementChanged
内,它可以作为e.NewElement
使用。
if (e.NewElement is CustomButton customButton
&& customButton.State)
{
Control.SetBackgroundColor(global::Android.Graphics.Color.LightGray);
}