2017-07-05 9 views
1

Ich bin neu in Xamarin Forms und ich stehe fest, versuchen StackLayout in einem AbsoluteLayout arbeiten. Es gibt 2 Kinder in meinem StackLayout: ein Bild (300x300 Zufallsbild) und ein Label. Ich werde ein Beispiel zeigen, das mein Problem veranschaulicht.Xamarin Forms - StackLayout in AbsoluteLayout

Der folgende Code funktioniert bei mir ganz gut (ich verwende ein 300x300 Bild):

public class TestedPage : ContentPage 
{ 
    public TestPage() 
    { 
    BackgroundColor = Color.Brown; 
    StackLayout stl = new StackLayout(); 
    AbsoluteLayout ab = new AbsoluteLayout(); 

    Image img = new Image(); 
    img.Source = ImageSource.FromFile("circle.png"); 

    Label lbl = new Label 
    { 
     Text = "#Text1000", 
     TextColor = Color.White, 
     FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Label)), 
     HorizontalOptions = LayoutOptions.Center 
    }; 

    stl.Children.Add(img); 
    stl.Children.Add(lbl); 

    ab.Children.Add(stl); 

    Content = ab; 
    } 
} 

Das Problem ist, dass der obige Code wird einfach werfen ‚stl‘ in es ohne Positionierung, die ist eine große Sache für mich, weil ich es genau dort positionieren muss, wo ich es möchte. Also, Sie können fragen, "warum verwenden Sie nicht mehr Parameter für Children.Add()?", Gut ab.Children.Add(stl, new Rectangle(0,0,450,450)); wird nicht 'STL' richtig positioniert, für mich zumindest, in dem obigen Code, wird es sein Start des Bildschirms und ein bisschen nach dem Zentrum, nach rechts, und nicht Ursprung (0,0). Auch neugierig, dass ich debuggte und herausgefunden, dass Stack, Image und Absolute alle unterschiedliche Höhe und Breite haben. Der obige Code gibt mir 450, 450 für 'STL' (was in Ordnung ist); 616, 360 für 'ab'; 150, 450 für 'img'.

Also, fehlt mir hier irgendetwas? Es ist ein wenig verwirrend für mich, weil ich es zur Arbeit bekomme, aber es ist ein bisschen "Buggy", verhält sich nicht wie erwartet. Da ich keine Erfahrung mit Xamarin Forms habe, glaube ich, dass ich hier etwas Wichtiges verpasse, weshalb ich hoffe, dass ihr mir ein paar Hinweise gibt.

Irgendwelche Ideen?

Jede Hilfe wird geschätzt. Vielen Dank!

Antwort

1

Sie könnten versuchen:

AbsoluteLayout.SetLayoutFlags(stl, AbsoluteLayoutFlags.All); 

AbsoluteLayout.SetLayoutBounds(stl, new Rectangle(0f, 0f, 1f, 1f)); 
+0

Danke für die Antwort. Entschuldigung, aber ich habe vergessen, zwei Dinge zu erwähnen: die Verwendung von AbsoluteLayoutFlags.All wird mir in dieser Situation nicht helfen, da es ein wenig spezifisch ist. Der ganze Code, den wir bisher gemacht haben, verwendet Flags, die auf None gesetzt sind, und wenn ich es auf All setze, beginnen Elemente sich falsch zu verhalten: sie bekommen falsche zufällige Positionen und manchmal erscheinen sie nicht (Bilder/Labels) werden einfach verschwinden. Die letzte ist, dass ich SetLayoutBounds bereits verwende, um Kinder zu positionieren, es ist nur, dass es nicht konsistent ist. – Ferdam

Verwandte Themen