2016-10-31 6 views
1

Ich bin neu in Xamarin so entschuldigen Sie mich, wenn das sehr offensichtlich ist.Xamarin Formen Grid Sizing Problem

Ich habe meiner Inhaltsseite ein Raster hinzugefügt. Ich möchte, dass das Raster die gesamte ContentPage belegt, von der ich annehme, dass sie die volle Größe des Geräts hat. In meinem Fall teste ich einen iPhone 6S Simulator. Die erste Zeile sollte 7,58% der Gesamthöhe des Rasters betragen und die letzte Zeile sollte den Rest ausfüllen. Ich füge die Beschriftung hinzu, um zu sehen, wo sich die Unterseite der letzten Zeile befindet, und es zeigt alle auf der Oberseite an. Es sieht aus wie ~ 7% von oben, was bedeutet, dass es der Boden der ersten Reihe ist.

<Grid x:Name="layoutGrid" HorizontalOptions="Fill" VerticalOptions="Fill"> 

<Grid.RowDefinitions> 
    <RowDefinition Height=".0758*"/> 
    <!-- Logo --> 

    <!-- Remaining Space --> 
    <RowDefinition Height="*"/>  
</Grid.RowDefinitions> 
<Grid.ColumnDefinitions> 
    <ColumnDefinition Width=".154*" /> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width=".154*" /> 
</Grid.ColumnDefinitions> 

<Image Aspect="Fill" Source="{local:ImageResource App1.Resources.background.png}" Grid.ColumnSpan="3" Grid.RowSpan="11"/> 
<Image Aspect="AspectFit" x:Name="settingsImage" Grid.Column="2" Grid.Row="0" Source="{local:ImageResource App1.Resources.settings-17-xxl.png}" HorizontalOptions="End"/> 

<Label x:Name="lblTest" Grid.Row="1" Text="Bottom" TextColor="White" VerticalOptions="End" HorizontalOptions="Center" FontSize="18"/> 

Antwort

0

Es sieht aus wie Sie zwei Einzelteile im gleichen Raum platzieren, die Sie nicht in einem Raster tun. IOW das erste Bild in der XAML (es scheint, Sie wollen dies über das gesamte Raster?) Hat keine Zeile und Spalte gesetzt, sondern standardmäßig auf Zeile/Spalte 0. Dann ist Ihre Spaltenspanne 3 und Zeilenspanne ist 11 (?) . Du hast nur zwei Zeilen, das macht keinen Sinn. Sie können das zweite Bild auch nicht in Zeile 0 Spalte 2 platzieren, da dieses bereits vom ersten Bild belegt ist. Möglicherweise möchten Sie das erste Bild als Seitenhintergrund festlegen. Oder verwenden Sie ein absolutes oder relatives Layout, in dem Sie Elemente überlagern können. Ein Gitter erlaubt, soweit ich weiß, keine überlagerten Gegenstände. Außerdem haben Sie Ihre vertikalen Optionen für die Beschriftung auf "Ende" gesetzt, wodurch sie am unteren Rand von Zeile 1 und nicht an der Spitze platziert wird. Versuchen Sie den folgenden XAML, um zu sehen, ob das näher an dem ist, was Sie wollen:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-namespace:App1" 
    x:Class="App1.MainPage" 
    BackgroundImage="{local:ImageResource App1.Resources.background.png}"> 

    <Grid x:Name="layoutGrid" HorizontalOptions="Fill" VerticalOptions="Fill"> 

     <Grid.RowDefinitions> 
      <RowDefinition Height=".0758*"/> 
      <!-- Logo --> 

      <!-- Remaining Space --> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width=".154*" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width=".154*" /> 
     </Grid.ColumnDefinitions> 

     <Image Aspect="AspectFit" x:Name="settingsImage" Grid.Column="2" Grid.Row="0" Source="{local:ImageResource App1.Resources.settings-17-xxl.png}" HorizontalOptions="End"/> 

     <Label x:Name="lblTest" Grid.Row="1" Text="Bottom" TextColor="White" VerticalOptions="Start" HorizontalOptions="Center" FontSize="18"/> 
    </Grid> 
</ContentPage> 
+0

Danke für die Info. Ich wollte das Hintergrundbild einstellen, aber mein Bild ist eingebettet. {local: ImageResource App1.Resources.background.png} gibt eine ImageSource zurück. Gibt es eine Möglichkeit, ein eingebettetes Bild als Hintergrundbild zu setzen? – jbassking10