2017-05-07 24 views
2

このブロックにはAspectFillブロック、StackLayoutにはこのブロックの下部に未知の高さの背景イメージを持つ固定高さ(たとえば200)のブロックが必要です。Xamarin.Formsのレイアウトの背景イメージ

RelativeLayoutを使って、ImageStackLayoutを入れようとしました。画像は完全に配置されていますが、下部にStackLayoutを配置する方法はわかりません。

それはテキスト異なるプラットフォームや画面サイズの異なる高さを有していてもよい(または、多分、これは間違っている?)becouseそれは、定数にHeightConstraitYConstraitだ。このレイアウトは2 Labelsをcontainesので、私はハードコードすることはできません

どうすればいいですか?

enter image description here

+1

[Xamarinは相対配置位置stacklayoutを下に作成する可能性があります](http://stackoverflow.com/questions/42919941/xamarin-forms-relative-layout-position-stacklayout-at-bottom) –

答えて

3

Iは、相対レイアウト方法を使用した代替:

これは、基本的に互いに利用可能なスペースを埋めるに重なる画像スタックレイアウトを使用します。内側のスタックレイアウトは、最後から展開することができます。上向きに拡大する "最大"量(イメージの最大50%など)を作成する場合は、外部レイアウトを「layoutBounds 1,1,1,5」に変更することができます。

以下のコードでは、コピーすれば簡単に見ることができます。 たとえば、背景画像やスタックレイアウト以外のアイテム(フレームなど)を使用するなど、さまざまなオプションを変更できます。

<AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> 
    <Image BackgroundColor="Red" AbsoluteLayout.LayoutBounds="1,1,1,1" AbsoluteLayout.LayoutFlags="All" Aspect="AspectFill"></Image> 
    <StackLayout AbsoluteLayout.LayoutBounds="1,1,1,1" AbsoluteLayout.LayoutFlags="All" BackgroundColor="Transparent"> 
     <StackLayout BackgroundColor="Blue" HorizontalOptions="FillAndExpand" VerticalOptions="EndAndExpand" Orientation="Vertical"> 
      <Label Text="Label 1"></Label> 
      <Label Text="Label 2"></Label> 
     </StackLayout> 
    </StackLayout> 
</AbsoluteLayout> 
1

代替方法は、グリッドです。

<Grid> 
    <Image Source="..." /> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="Auto" /> 
     </Grid.RowDefinitions> 

     <StackLayout Grid.Row="1">  
     </StackLayout> 
    </Grid> 
</Grid> 

アブソリュートレイアウトまたはグリッドから選択できますが、私はRelativeLayoutをクリアにすることをお勧めします。これは、非効率的なレイアウトの1つです。

関連する問題