Recherche…


ContentPresenter

Un gestionnaire de disposition pour les vues modélisées. Utilisé dans un ControlTemplate pour marquer l'emplacement du contenu à présenter.

ContentPresenter Layout (image par Xamarin)

ContentView

Un élément avec un seul contenu. ContentView a très peu d'utilisation. Son but est de servir de classe de base pour les vues composées définies par l'utilisateur.

ContentView Layout (image par Xamarin)

XAML

<ContentView>
<Label Text="Hi, I'm a simple Label inside of a simple ContentView"
HorizontalOptions="Center"
VerticalOptions="Center"/>
</ContentView>

Code

var contentView = new ContentView {
Content = new Label {
 Text = "Hi, I'm a simple Label inside of a simple ContentView",
 HorizontalOptions = LayoutOptions.Center,
 VerticalOptions = LayoutOptions.Center
}
};

Cadre

Un élément contenant un seul enfant, avec des options de cadrage. Frame ont un défaut Xamarin.Forms.Layout.Padding de 20.

Disposition du cadre (image par Xamarin)

XAML

<Frame>
<Label Text="I've been framed!"
HorizontalOptions="Center"
VerticalOptions="Center" />
</Frame>

Code

var frameView = new Frame {
Content = new Label {
 Text = "I've been framed!",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center
},
OutlineColor = Color.Red
};

ScrollView

Un élément capable de défiler si son Content requis.

ScrollView contient des dispositions et leur permet de faire défiler l'écran. ScrollView est également utilisé pour permettre aux vues de se déplacer automatiquement dans la partie visible de l'écran lorsque le clavier est affiché.

ScrollView Layout (image par Xamarin)

Remarque: les ScrollViews ne doivent pas être imbriquées. De plus, les ScrollViews ne doivent pas être imbriquées avec d'autres contrôles fournissant un défilement, tels que ListView et WebView .

Un ScrollView est facile à définir. Dans XAML:

<ContentPage.Content>
    <ScrollView>
        <StackLayout>
            <BoxView BackgroundColor="Red" HeightRequest="600" WidthRequest="150" />
            <Entry />
        </StackLayout>
    </ScrollView>
</ContentPage.Content>

La même définition dans le code:

var scroll = new ScrollView();
Content = scroll;
var stack = new StackLayout();
stack.Children.Add(new BoxView { BackgroundColor = Color.Red,   HeightRequest = 600, WidthRequest = 600 });
stack.Children.Add(new Entry());

TemplatedView

Un élément qui affiche le contenu avec un modèle de contrôle et la classe de base pour ContentView .

TemplatedView Layout (image par Xamarin)

AbsoluteLayout

AbsoluteLayout positionne et dimensionne les éléments enfants proportionnellement à sa propre taille et position ou à des valeurs absolues. Les vues enfants peuvent être positionnées et dimensionnées à l'aide de valeurs proportionnelles ou de valeurs statiques, et les valeurs proportionnelles et statiques peuvent être mélangées.

AbsoluteLayout (image par Xamarin)

Une définition d'un AbsoluteLayout dans XAML ressemble à ceci:

<AbsoluteLayout>
    <Label Text="I'm centered on iPhone 4 but no other device"
        AbsoluteLayout.LayoutBounds="115,150,100,100" LineBreakMode="WordWrap"  />
    <Label Text="I'm bottom center on every device."
        AbsoluteLayout.LayoutBounds=".5,1,.5,.1" AbsoluteLayout.LayoutFlags="All"
        LineBreakMode="WordWrap"  />
    <BoxView Color="Olive"  AbsoluteLayout.LayoutBounds="1,.5, 25, 100"
        AbsoluteLayout.LayoutFlags="PositionProportional" />
    <BoxView Color="Red" AbsoluteLayout.LayoutBounds="0,.5,25,100"
        AbsoluteLayout.LayoutFlags="PositionProportional" />
    <BoxView Color="Blue" AbsoluteLayout.LayoutBounds=".5,0,100,25"
        AbsoluteLayout.LayoutFlags="PositionProportional" />
    <BoxView Color="Blue" AbsoluteLayout.LayoutBounds=".5,0,1,25"
        AbsoluteLayout.LayoutFlags="PositionProportional, WidthProportional" />
</AbsoluteLayout>

La même disposition ressemblerait à ceci dans le code:

Title = "Absolute Layout Exploration - Code";
var layout = new AbsoluteLayout();

var centerLabel = new Label {
Text = "I'm centered on iPhone 4 but no other device.",
LineBreakMode = LineBreakMode.WordWrap};

AbsoluteLayout.SetLayoutBounds (centerLabel, new Rectangle (115, 159, 100, 100));
// No need to set layout flags, absolute positioning is the default

var bottomLabel = new Label { Text = "I'm bottom center on every device.", LineBreakMode = LineBreakMode.WordWrap };
AbsoluteLayout.SetLayoutBounds (bottomLabel, new Rectangle (.5, 1, .5, .1));
AbsoluteLayout.SetLayoutFlags (bottomLabel, AbsoluteLayoutFlags.All);

var rightBox = new BoxView{ Color = Color.Olive };
AbsoluteLayout.SetLayoutBounds (rightBox, new Rectangle (1, .5, 25, 100));
AbsoluteLayout.SetLayoutFlags (rightBox, AbsoluteLayoutFlags.PositionProportional);

var leftBox = new BoxView{ Color = Color.Red };
AbsoluteLayout.SetLayoutBounds (leftBox, new Rectangle (0, .5, 25, 100));
AbsoluteLayout.SetLayoutFlags (leftBox, AbsoluteLayoutFlags.PositionProportional);

var topBox = new BoxView{ Color = Color.Blue };
AbsoluteLayout.SetLayoutBounds (topBox, new Rectangle (.5, 0, 100, 25));
AbsoluteLayout.SetLayoutFlags (topBox, AbsoluteLayoutFlags.PositionProportional);

var twoFlagsBox = new BoxView{ Color = Color.Blue };
AbsoluteLayout.SetLayoutBounds (topBox, new Rectangle (.5, 0, 1, 25));
AbsoluteLayout.SetLayoutFlags (topBox, AbsoluteLayoutFlags.PositionProportional | AbsoluteLayout.WidthProportional);

layout.Children.Add (bottomLabel);
layout.Children.Add (centerLabel);
layout.Children.Add (rightBox);
layout.Children.Add (leftBox);
layout.Children.Add (topBox);

Le contrôle AbsoluteLayout de Xamarin.Forms vous permet de spécifier exactement à l’écran les éléments enfants, ainsi que leur taille et leur forme (limites).

Il existe différentes manières de définir les limites des éléments enfants en fonction de l'énumération AbsoluteLayoutFlags utilisée pendant ce processus. L'énumération AbsoluteLayoutFlags contient les valeurs suivantes:

  • Tous : Toutes les dimensions sont proportionnelles.
  • HeightProportional : la hauteur est proportionnelle à la disposition.
  • Aucun : Aucune interprétation n'est effectuée.
  • PositionProportional : Combine XProportional et YProportional.
  • SizeProportional : Combine WidthProportional et HeightProportional.
  • WidthProportional : La largeur est proportionnelle à la disposition.
  • XProportional : la propriété X est proportionnelle à la disposition.
  • YProportional : la propriété Y est proportionnelle à la disposition.

Le processus de travail avec la mise en page du conteneur AbsoluteLayout peut sembler un peu contre-intuitif au début, mais avec un peu d’utilisation, il deviendra familier. Une fois que vous avez créé vos éléments enfants, pour les définir dans une position absolue dans le conteneur, vous devez suivre trois étapes. Vous souhaiterez définir les indicateurs assignés aux éléments à l'aide de la méthode AbsoluteLayout.SetLayoutFlags () . Vous voudrez également utiliser la méthode AbsoluteLayout.SetLayoutBounds () pour donner aux éléments leurs limites. Enfin, vous voudrez ajouter les éléments enfants à la collection Children. Étant donné que Xamarin.Forms est une couche d'abstraction entre Xamarin et les implémentations spécifiques aux périphériques, les valeurs de position peuvent être indépendantes des pixels du périphérique. C'est là que les indicateurs de disposition mentionnés précédemment entrent en jeu. Vous pouvez choisir comment le processus de mise en page des contrôles Xamarin.Forms doit interpréter les valeurs que vous définissez.

la grille

Une présentation contenant des vues organisées en lignes et en colonnes.

Grid Layout (image par Xamarin)

Ceci est une définition de Grid typique dans XAML.

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="2*" />
    <RowDefinition Height="*" />
    <RowDefinition Height="200" />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" />
    <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>
    
  <ContentView Grid.Row="0" Grid.Column="0"/>
  <ContentView Grid.Row="1" Grid.Column="0"/>
  <ContentView Grid.Row="2" Grid.Column="0"/>

  <ContentView Grid.Row="0" Grid.Column="1"/>
  <ContentView Grid.Row="1" Grid.Column="1"/>
  <ContentView Grid.Row="2" Grid.Column="1"/>

</Grid>

La même Grid définie dans le code ressemble à ceci:

var grid = new Grid();
grid.RowDefinitions.Add (new RowDefinition { Height = new GridLength(2, GridUnitType.Star) });
grid.RowDefinitions.Add (new RowDefinition { Height = new GridLength (1, GridUnitType.Star) });
grid.RowDefinitions.Add (new RowDefinition { Height = new GridLength(200)});
grid.ColumnDefinitions.Add (new ColumnDefinition{ Width = new GridLength (200) });

Pour ajouter des éléments à la grille: Dans XAML :

<Grid>
      
   <--DEFINITIONS...--!>
        
   <ContentView Grid.Row="0" Grid.Column="0"/>
   <ContentView Grid.Row="1" Grid.Column="0"/>
   <ContentView Grid.Row="2" Grid.Column="0"/>

   <ContentView Grid.Row="0" Grid.Column="1"/>
   <ContentView Grid.Row="1" Grid.Column="1"/>
   <ContentView Grid.Row="2" Grid.Column="1"/>

</Grid>

En code C #:

var grid = new Grid();
//DEFINITIONS...
var topLeft = new Label { Text = "Top Left" };
var topRight = new Label { Text = "Top Right" };
var bottomLeft = new Label { Text = "Bottom Left" };
var bottomRight = new Label { Text = "Bottom Right" };
grid.Children.Add(topLeft, 0, 0);
grid.Children.Add(topRight, 0, 1);
grid.Children.Add(bottomLeft, 1, 0);
grid.Children.Add(bottomRight, 1, 1);

Pour la Height et la Width plusieurs unités sont disponibles.

  • Auto - taille automatiquement pour adapter le contenu de la ligne ou de la colonne. Spécifié comme GridUnitType.Auto en C # ou comme Auto dans XAML.
  • Proportionnel - dimensionne les colonnes et les lignes en proportion de l'espace restant. Spécifié comme valeur et GridUnitType.Star en C # et en tant que # * dans XAML, # étant la valeur souhaitée. Si vous spécifiez une ligne / colonne avec *, cela remplira l'espace disponible.
  • Absolute - dimensionne les colonnes et les lignes avec des valeurs de hauteur et de largeur spécifiques et fixes. Spécifié comme valeur et GridUnitType.Absolute en C # et en # dans XAML, # étant la valeur souhaitée.

Remarque: Les valeurs de largeur des colonnes sont définies par défaut sur Auto dans Xamarin.Forms, ce qui signifie que la largeur est déterminée par la taille des enfants. Notez que cela diffère de l'implémentation de XAML sur les plates-formes Microsoft, où la largeur par défaut est *, ce qui remplira l'espace disponible.

Disposition relative

Une Layout qui utilise des Constraints pour mettre en forme ses enfants.

RelativeLayout permet de positionner et de dimensionner les vues relatives aux propriétés de la présentation ou des vues frères. Contrairement à AbsoluteLayout , RelativeLayout n’a pas le concept de l’ancre mobile et n’a pas de possibilité de positionner les éléments par rapport aux bords inférieur ou droit de la mise en page. RelativeLayout prend en charge le positionnement d'éléments en dehors de ses propres limites.

RelativeLayout (image par Xamarin)

Un RelativeLayout dans XAML, est comme ceci:

<RelativeLayout>
    <BoxView Color="Red" x:Name="redBox"
        RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,
            Property=Height,Factor=.15,Constant=0}"
        RelativeLayout.WidthConstraint="{ConstraintExpression
            Type=RelativeToParent,Property=Width,Factor=1,Constant=0}"
        RelativeLayout.HeightConstraint="{ConstraintExpression
            Type=RelativeToParent,Property=Height,Factor=.8,Constant=0}" />
    <BoxView Color="Blue"
        RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToView,
            ElementName=redBox,Property=Y,Factor=1,Constant=20}"
        RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToView,
            ElementName=redBox,Property=X,Factor=1,Constant=20}"
        RelativeLayout.WidthConstraint="{ConstraintExpression
            Type=RelativeToParent,Property=Width,Factor=.5,Constant=0}"
        RelativeLayout.HeightConstraint="{ConstraintExpression
            Type=RelativeToParent,Property=Height,Factor=.5,Constant=0}" />
</RelativeLayout>

La même disposition peut être réalisée avec ce code:

layout.Children.Add (redBox, Constraint.RelativeToParent ((parent) => {
        return parent.X;
    }), Constraint.RelativeToParent ((parent) => {
        return parent.Y * .15;
    }), Constraint.RelativeToParent((parent) => {
        return parent.Width;
    }), Constraint.RelativeToParent((parent) => {
        return parent.Height * .8;
    }));
layout.Children.Add (blueBox, Constraint.RelativeToView (redBox, (Parent, sibling) => {
        return sibling.X + 20;
    }), Constraint.RelativeToView (blueBox, (parent, sibling) => {
        return sibling.Y + 20;
    }), Constraint.RelativeToParent((parent) => {
        return parent.Width * .5;
    }), Constraint.RelativeToParent((parent) => {
        return parent.Height * .5;
    }));

StackLayout

StackLayout organise les vues dans une ligne unidimensionnelle ("pile"), horizontalement ou verticalement. Views dans un StackLayout peuvent être dimensionnées en fonction de l'espace dans la mise en page à l'aide des options de présentation. Le positionnement est déterminé par les vues de commande qui ont été ajoutées à la mise en page et aux options de disposition des vues.

StackLayout (image par Xamarin)

Utilisation dans XAML

<StackLayout>
    <Label Text="This will be on top" />
    <Button Text="This will be on the bottom" />
</StackLayout>

Utilisation dans le code

StackLayout stackLayout = new StackLayout
{
    Spacing = 0,
    VerticalOptions = LayoutOptions.FillAndExpand,
    Children = 
    {
        new Label
        {
            Text = "StackLayout",
            HorizontalOptions = LayoutOptions.Start
        },
        new Label
        {
            Text = "stacks its children",
            HorizontalOptions = LayoutOptions.Center
        },
        new Label
        {
            Text = "vertically",
            HorizontalOptions = LayoutOptions.End
        },
        new Label
        {
            Text = "by default,",
            HorizontalOptions = LayoutOptions.Center
        },
        new Label
        {
            Text = "but horizontal placement",
            HorizontalOptions = LayoutOptions.Start
        },
        new Label
        {
            Text = "can be controlled with",
            HorizontalOptions = LayoutOptions.Center
        },
        new Label
        {
            Text = "the HorizontalOptions property.",
            HorizontalOptions = LayoutOptions.End
        },
        new Label
        {
            Text = "An Expand option allows one or more children " +
                   "to occupy the an area within the remaining " +
                   "space of the StackLayout after it's been sized " +
                   "to the height of its parent.",
            VerticalOptions = LayoutOptions.CenterAndExpand,
            HorizontalOptions = LayoutOptions.End
        },
        new StackLayout
        {
            Spacing = 0,
            Orientation = StackOrientation.Horizontal,
            Children = 
            {
                new Label
                {
                    Text = "Stacking",
                },
                new Label
                {
                    Text = "can also be",
                    HorizontalOptions = LayoutOptions.CenterAndExpand
                },
                new Label
                {
                    Text = "horizontal.",
                },
            }
        }
    }
};


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow