如何从Xamarin.Forms.StackLayout获取Android原生StackView?

时间:2017-09-29 21:36:12

标签: xamarin xamarin.android

我需要从Xamarin.Forms.StackLayout实例获取原生Android StackView控件。这是一些解释问题的伪代码:

 void ProcessMySL(Xamarin.Forms.StackLayout sl) {
   var renderer =
    Xamarin.Forms.Platform.Android.RendererFactory.GetRenderer(sl);
   ...
 }

当我检查渲染器对象时,它的类型为Xamarin.Forms.Platform.Android.VisualElementRenderer。但是,它没有Control之类的任何属性来获取本机StackView对象。

我想知道如何获取原生视图。问候。

2 个答案:

答案 0 :(得分:0)

  

Xamarin.Forms.Platform.Android.VisualElementRenderer。但是,它没有任何属性,如Control,以获取本机StackView对象。

参考Renderer的官方文件:Renderer Base Classes and Native ControlStackLayout正在使用ViewRenderer,因此会将其呈现为View个对象,而不是StackView

此外,使用Xamarin.Forms.Platform.Android.RendererFactory.GetRenderer(sl)仅返回DefaultRenderer,但不会公开Control属性。因此,请改为创建自定义渲染器。

答案 1 :(得分:0)

它显示Xamarin.Forms.StackLayout未呈现为Android的StackView控件,而是更通用的ViewGroup对象。要获取Android原生视图,以下代码将起作用:

var renderer = RenderFactory.GetRenderer(stackLayout);
Android.Views.View view = renderer.ViewGroup;
...