2017-09-29 14 views
0

Xamarin.Forms.StackLayoutインスタンスからネイティブAndroid StackViewコントロールを取得する必要があります。ここではいくつかの擬似コードは、問題を説明することである。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です。しかし、それは私にネイティブのStackViewオブジェクトを取得するためにControlのようなプロパティを持っていません。

ネイティブビューを取得するにはどうすればいいですか?よろしく。

+0

これは、[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-のように見えます問題)を作ります。レンダラーが必要な理由は何ですか?また、カスタムレンダラーを作成しない理由は何ですか? –

+0

ありがとうございました。 ContentDescriptionフィールドをネイティブAndroid StackViewに設定する必要があります。 – Peter

+0

カスタムレンダラを作成しないのはなぜですか? –

答えて

0

これは、AndroidのStackViewコントロールとしてレンダリングされていませんが、より一般的なViewGroupオブジェクトとして表示されます。 Androidのネイティブのビューを取得するには、次のコードは動作します:

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

Xamarin.Forms.Platform.Android.VisualElementRenderer。しかし、ネイティブのStackViewオブジェクトを取得するためのControlなどのプロパティはありません。

レンダラーの公式ドキュメント:Renderer Base Classes and Native Controlを参照してください。 StackLayoutViewRendererを使用しているため、StackViewではなくViewオブジェクトにレンダリングされます。

さらに、Xamarin.Forms.Platform.Android.RendererFactory.GetRenderer(sl)を使用すると、プロパティが公開されていないDefaultRendererが返されます。ですから、代わりにカスタムレンダラーを作成してください。

+0

ありがとうございます。 ViewRendererの使用に関するヒントは私のために働いていました。よろしく。 – Peter