OK、私はあきらめます。この単純なことを達成しようとするのに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つの画像(3つのレイヤーが重なっているようなもの)からなる「1つの画像」を作成する必要があります。そのためには、画像のためだけにAbsoluteLayout
が必要です。
このファイルのすべてのビューに対して可能なすべての組み合わせを試しましたが、何も機能しません。
問題は、スクロールが常に画像の下に大きなスペースを残してしまうことです。そして、緑の色では、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日間それに固執している、私は他に何をするか分からない。
ScrollView.Content
にはRelativeLayout
を使ってみました。そしてそれを理解しようと一日のうちに(私が完全に行ったかどうかわからない)、私はもっと悪い問題を抱えていました。 RelativeLayout
は、Scroll
の高さをオーバーフローさせ、タブの背後にある画像の一部を隠します(ベースアプリのコンテナ)。
しかし、私は実際にStackLayout->items + AbsoluteLayout
アプローチを維持したいと思います。
何か助けていただきありがとうございます。
代わりにグリッドを使用したことはありますか?あなたが望むものを得るには、(少なくとも私の意見では)やや簡単な方法でしょうか。絶対レイアウトは、その性質上、あなたがそれについて何もできることがなければ、絶対的な最後の手段になるはずです。 – EvilBeer
私は非常にはっきりしていないかもしれません。私はAbsoluteLayoutが必要です。なぜなら、3つの画像がオーバーレイされているからです。彼らは透明性を持つpngです。 – Dpedrinha