2016-06-07 12 views
0

Ich möchte nur ein benutzerdefiniertes Steuerelement mit Xamarin.Forms erstellen. Dieses benutzerdefinierte Steuerelement sollte ein Array/eine Liste von Ansichten in der XAML (wie zum Beispiel Stacklayout) nehmen.Benutzerdefiniertes Steuerelement wie StackLayout mit Xamarin.Forms

Meine XAML sieht wie folgt aus:

<controls:MyLayout> 
    <ContentView BackgroundColor="Green"> 
     <Label Text="Test 1" /> 
    </ContentView> 

    <ContentView BackgroundColor="Red"> 
     <Label Text="Test 1" /> 
    </ContentView> 
</controls:MyLayout> 

Und die Klasse für MyLayout:

[ContentProperty("Children")] 
public class MyLayout: ScrollView, IViewContainer<View> 
{ 
    public IList<View> Children { get; set; } 

    // And some more properties and methods ... 
} 

Aber wenn ich diese kompilieren und es auf meinem Android-Handy laufen, ich folgende Fehlermeldung erhalten:

Exception has been thrown by the target of an invocation. ---> Xamarin.Forms.Xaml.XamlParseException: Position 29:8. Cannot assign property "Children": type mismatch between "Xamarin.Forms.ContentView" and "System.Collections.Generic.IList`1[Xamarin.Forms.View]"

Wie kann ich das lösen? Was vermisse ich?

+0

Keine Änderung Das ist nicht das Problem. Mit 'ContentView' habe ich den gleichen Fehler: Typ nicht übereinstimmen zwischen "Xamarin.Forms.ContentView" und "System.Collections.Generic.IList'1 [Xamarin.Forms.ContentView]" – Joehl

+2

Sie können die 'Xamarin.Forms' Quelle beziehen Erstellen Sie Ihr Steuerelement, jetzt, wo es Open Source ist. Sie finden den Code unter https://github.com/xamarin/Xamarin.Forms –

Antwort

-1

Sie müssen Gegenstände in einen Behälter stellen wie:

<ContentView BackgroundColor="Red"> 
     <Label Text="Test 1" /> 
    </ContentView> 
</x:Array> 

Aber ich denke, es ist nicht ein guter Ansatz. Sie können wie unten eine Klasse für View Sammlung erstellen und auf Ihrem Code verwenden, so dass man beobachten kann, wenn etwas in sie zur Laufzeit hinzugefügt:

public class ViewCollection : ObservableCollection<View> 
{ 

} 


<controls:MyLayout> 
    <local:ViewCollection Type="{x:Type View}"> 
     <ContentView BackgroundColor="Green"> 
      <Label Text="Test 1" /> 
     </ContentView> 

     <ContentView BackgroundColor="Red"> 
      <Label Text="Test 1" /> 
     </ContentView> 
    </local:ViewCollection> 
</controls:MyLayout> 

Sie müssen auch Children Immobilientyp ViewCollection

Verwandte Themen