2017-07-05 58 views
1

我是Xamarin Forms的新手,我試圖讓StackLayout在AbsoluteLayout中工作。在我的StackLayout中有兩個孩子:一個圖像(300x300隨機圖像)和一個標籤。我將展示一個說明我的問題的例子。Xamarin Forms - StackLayout在AbsoluteLayout裏面

下面的代碼工作得很好,我(我使用的是300x300的圖像):

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; 
    } 
} 

的問題是,上面的代碼簡單地將它扔「STL」沒有定位,這對我來說很重要,因爲我需要將它準確定位在我想要的位置。 因此,您可能會問「爲什麼不使用Children.Add()的更多參數?」,以及ab.Children.Add(stl, new Rectangle(0,0,450,450));將不會正確定位'stl',至少對於我來說,在上面的代碼中,它將會在屏幕開始和中心之後,右側,而不是原點(0,0)。另外,我很好奇,我調試並發現堆棧,圖像和絕對都有不同的高度和寬度。上面的代碼給我450,450''stl'(這很好); 616,360代表'ab'; 150,450'img'。

那麼,有什麼我在這裏失蹤?這對我來說有點令人困惑,因爲我得到它的工作,但它有點「錯誤」,並不像我預期的那樣。 因爲我沒有Xamarin Forms的經驗,所以我相信我在這裏錯過了一些重要的東西,這就是爲什麼我希望你們可以給我一些線索。

任何想法?

任何幫助表示讚賞。謝謝!

回答

1

您可以試試:

AbsoluteLayout.SetLayoutFlags(stl, AbsoluteLayoutFlags.All); 

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

感謝您的答覆。對不起,但我忘了提兩件事:使用AbsoluteLayoutFlags.All不會幫助我在這種情況下,因爲它有點特定。到目前爲止,我們所做的所有代碼都使用Flags設置爲None,並且當我將其設置爲All時,元素開始表現不正確:它們出錯的隨機位置以及有時不顯示(圖像/標籤)將簡單消失。 最後一個是我已經在使用SetLayoutBounds來定位孩子,只是它不一致。 – Ferdam