Xamarin Forms - 自定义渲染器无法获取本机控件 (UWP)
Xamarin Forms - Custom Renderer Can't Get Native Control (UWP)
我有一个名为 RecordProvider2 的 class。它继承自 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)
{
}
}
}
编辑:如下所述,渲染器本身是原生控件。
您可以使用 this
访问本机控件实例。
if (e.OldElement == null)
{
var nativeCtrl = this;
或者,使用 this.ContainerElement
.
编辑 1 - 注意:以上代码将提供对本机控件容器的访问权限。这对 ContentView
非常有效;因为大多数本机行为(例如手势处理等)都可以分配给它。
你需要,
SetNativeControl(new Panel())
控制之前是 NOT-NULL
。
面板是您正在渲染的任何本机控件。
我有一个名为 RecordProvider2 的 class。它继承自 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)
{
}
}
}
编辑:如下所述,渲染器本身是原生控件。
您可以使用 this
访问本机控件实例。
if (e.OldElement == null)
{
var nativeCtrl = this;
或者,使用 this.ContainerElement
.
编辑 1 - 注意:以上代码将提供对本机控件容器的访问权限。这对 ContentView
非常有效;因为大多数本机行为(例如手势处理等)都可以分配给它。
你需要,
SetNativeControl(new Panel())
控制之前是 NOT-NULL
。
面板是您正在渲染的任何本机控件。