Xamarin表单 - 自定义渲染器无法获得本机控制(UWP)

时间:2017-09-06 01:26:40

标签: c# uwp xamarin.forms custom-renderer

我有一个名为RecordProvider2的类。它继承自ContentView。我想在幕后获取本机控件的实例。我不确定UWP上的控件是什么,但根据这篇文章,它应该是FrameworkElement(https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/custom-renderer/renderers/)。

所以,我编写了这个自定义渲染器,并且根据所有帐户,我应该能够使用" Control"来访问本机控件。渲染器的属性。但是,在OnElementChanged事件中,Control属性始终为null。我做错了什么?

public class RecordProvider2Renderer : ViewRenderer<RecordProvider2, FrameworkElement>
{
    protected override void OnElementChanged(ElementChangedEventArgs<RecordProvider2> e)
    {
        base.OnElementChanged(e);

        if (Control != null)
        {
        }
    }
}

编辑:如下所述,渲染器本身只是 IS 本机控件。

2 个答案:

答案 0 :(得分:6)

您可以使用this来访问本机控件实例。

 if (e.OldElement == null)
 {
       var nativeCtrl = this;

或者,使用this.ContainerElement

编辑1 - 注意:上面的代码将允许访问本机控件容器。哪个适用于ContentView;因为大多数本地行为,例如手势处理等都可以分配给它。

答案 1 :(得分:0)

您需要

SetNativeControl(new Panel())

在控制权为NOT-NULL之前。

面板是您要呈现的任何本机控件。