好吧,我放棄了。花了3天時間來完成這個簡單的事情。如何正確使用Xamarin中ScrollView內的StackLayout中的AbsoluteLayout?
這裏是我的情況下(不是全部在同一個XAML文件):
<TabbedPage>
<NavigationPage>
<ContentPage/>
<ContentPage/>
<CarouselPage>
<CarouselContentPage>
這是CarouselContentPage
:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.Layouts.PointInfoDataTemplate"
>
<ContentPage.Content>
<ScrollView Orientation="Vertical" BackgroundColor="Navy" VerticalOptions="Fill">
<StackLayout x:Name="MyStackLayout" HorizontalOptions="StartAndExpand" VerticalOptions="Start" BackgroundColor="Gray">
<Label x:Name="NameLabel" FontSize="Medium" HorizontalOptions="Center"/>
<Label x:Name="DescLabel" FontSize="Medium" HorizontalOptions="Center" />
<AbsoluteLayout x:Name="ImgsContainer" VerticalOptions="Start" BackgroundColor="Green">
<Image x:Name="BackImg" Aspect="AspectFit" VerticalOptions="Start"/>
<Image x:Name="MidImg" Aspect="AspectFit" VerticalOptions="Start"/>
<Image x:Name="FrontImg" Aspect="AspectFit" VerticalOptions="Start"/>
</AbsoluteLayout>
</StackLayout>
</ScrollView>
</ContentPage.Content>
</ContentPage>
我需要的是簡單,對於一個頁面垂直滾動一些標籤垂直堆疊,然後我需要創建「一張圖片」,這張圖片由3張圖片組成(如3張圖片重疊)。爲此,我需要AbsoluteLayout
只是爲了圖像,對吧?
我試過的VerticalOptions
所有可能的組合,在這個文件中的所有意見,並沒有什麼作品。
問題是滾動總是在圖像下面留下大的空間。和綠色,所以這意味着AbsoluteLayout
是沒有縮小圖像大小後的高度。圖像可以具有不同的尺寸和形狀(儘管每個頁面中的3個都具有相同的尺寸),並且它們都大於任何智能手機屏幕(稍後的縮放功能)。所以我需要圖像使用所有可用的寬度,並保持縱橫比(我相信AspectFit
)。
所有的圖像都是嵌入式資源。這裏是背後CarouselContentPage
代碼:
public PointInfoDataTemplate(PointModel point)
{
InitializeComponent();
NameLabel.Text = point.nome;
DescLabel.Text = point.apelido;
BackImg.Source = ImageSource.FromResource(point.backimg);
MidImg.Source = ImageSource.FromResource(point.midimg);
FrontImg.Source = ImageSource.FromResource(point.frontimg);
//BackImg.SizeChanged += delegate {
// ImgsContainer.Layout(new Rectangle(imgsContainer.Bounds.X, imgsContainer.Bounds.Y, BackImg.Bounds.Width, BackImg.Bounds.Height));
// MyStackLayout.Layout(new Rectangle(imgsContainer.Bounds.X, imgsContainer.Bounds.Y, BackImg.Bounds.Width, BackImg.Bounds.Height));
//};
}
我甚至試過SizeChanged
事件之後調整的佈局,但它也不能工作。
所以也許我做錯了什麼,這是我所有的代碼。我堅持了3天,我不知道還有什麼要做。
我試圖用一個RelativeLayout
爲ScrollView.Content
。經過整整一天的努力去理解它(不知道我是否完全做到了),我遇到了更糟的問題。 RelativeLayout
將溢出Scroll
高度並隱藏選項卡(基本應用程序容器)後面的部分圖像。
但我真的很想保留StackLayout->items + AbsoluteLayout
方法。
我很感激任何幫助。
您是否考慮過使用網格?將是一個相當容易(至少在我看來)的方式來得到你想要的。由於它的性質,如果沒有別的可以做的事情,絕對佈局應該是絕對的最後手段。 – EvilBeer
我可能不是很清楚。我需要AbsoluteLayout,因爲覆蓋了3張圖片。他們是透明的PNG。 – Dpedrinha