2017-07-05 32 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