Suche…


ContentPresenter

Ein Layout-Manager für Vorlagen mit Vorlagen. Wird in einer ControlTemplate verwendet, um zu markieren, wo der anzuzeigende Inhalt angezeigt wird.

ContentPresenter Layout (Bild von Xamarin)

ContentView

Ein Element mit einem einzigen Inhalt. ContentView hat wenig Eigennutz. Sein Zweck ist es, als Basisklasse für benutzerdefinierte zusammengesetzte Ansichten zu dienen.

ContentView Layout (Bild von 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
}
};

Rahmen

Ein Element, das ein einzelnes Kind enthält, mit einigen Gestaltungsoptionen. Der Rahmen hat einen Standardwert von Xamarin.Forms.Layout.Padding von 20.

Rahmenlayout (Bild von 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

Ein Element, das scrollen kann, wenn der Content erfordert.

ScrollView enthält Layouts und ermöglicht das ScrollView . ScrollView wird auch verwendet, um zuzulassen, dass Ansichten automatisch zum sichtbaren Teil des Bildschirms wechseln, wenn die Tastatur angezeigt wird.

ScrollView-Layout (Bild von Xamarin)

Hinweis: ScrollViews sollten nicht verschachtelt sein. Außerdem sollte ScrollViews nicht mit anderen Steuerelementen verschachtelt werden, die einen Bildlauf ermöglichen, wie WebView . B. ListView und WebView .

Ein ScrollView ist leicht zu definieren. In XAML:

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

Dieselbe Definition im 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

Ein Element, das Inhalt mit einer Steuerelementvorlage und die Basisklasse für ContentView .

Vorlagenlayout (Bild von Xamarin)

AbsoluteLayout

AbsoluteLayout positioniert und sortiert untergeordnete Elemente proportional zu ihrer eigenen Größe und Position oder zu absoluten Werten. Untergeordnete Ansichten können mit proportionalen Werten oder statischen Werten positioniert und deren Größe angepasst werden. Proportionale und statische Werte können gemischt werden.

AbsoluteLayout (Bild von Xamarin)

Eine Definition eines AbsoluteLayout in XAML sieht folgendermaßen aus:

<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>

Das gleiche Layout würde im Code so aussehen:

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);

Mit dem Steuerelement AbsoluteLayout in Xamarin.Forms können Sie angeben, wo genau die untergeordneten Elemente auf dem Bildschirm angezeigt werden sollen, sowie deren Größe und Form (Begrenzungen).

Es gibt verschiedene Möglichkeiten, die Grenzen der untergeordneten Elemente basierend auf der AbsoluteLayoutFlags-Enumeration festzulegen, die während dieses Prozesses verwendet werden. Die Aufzählung AbsoluteLayoutFlags enthält die folgenden Werte:

  • Alle : Alle Maße sind proportional.
  • HeightProportional : Die Höhe ist proportional zum Layout.
  • Keine : Es wird keine Interpretation vorgenommen.
  • PositionProportional : Kombiniert XProportional und YProportional.
  • SizeProportional : Kombiniert WidthProportional und HeightProportional.
  • WidthProportional : Die Breite ist proportional zum Layout.
  • XProportional : X-Eigenschaft ist proportional zum Layout.
  • YProportional : Die Y-Eigenschaft ist proportional zum Layout.

Die Arbeit mit dem Layout des AbsoluteLayout-Containers mag auf den ersten Blick etwas uninteressant erscheinen, aber mit ein wenig Einsatz wird er vertraut. Nachdem Sie Ihre untergeordneten Elemente erstellt haben, müssen Sie drei Schritte ausführen, um sie an eine absolute Position innerhalb des Containers zu setzen. Sie möchten die den Elementen zugewiesenen Flags mit der AbsoluteLayout.SetLayoutFlags () -Methode festlegen. Sie möchten auch die AbsoluteLayout.SetLayoutBounds () - Methode verwenden, um den Elementen ihre Grenzen zu geben. Schließlich möchten Sie die untergeordneten Elemente der Children-Sammlung hinzufügen. Da Xamarin.Forms eine Abstraktionsschicht zwischen Xamarin und den gerätespezifischen Implementierungen ist, können die Positionswerte unabhängig von den Gerätepixeln sein. Hier kommen die zuvor genannten Layout-Flags ins Spiel. Sie können auswählen, wie der Layoutprozess der Xamarin.Forms-Steuerelemente die von Ihnen definierten Werte interpretieren soll.

Gitter

Ein Layout mit Ansichten, die in Zeilen und Spalten angeordnet sind.

Rasterlayout (Bild von Xamarin)

Dies ist eine typische Grid Definition in 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>

Das gleiche im Code definierte Grid sieht folgendermaßen aus:

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) });

So fügen Sie Elemente zum Raster hinzu: In 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>

In C # -Code:

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);

Für Height und Width mehrere Einheiten zur Verfügung.

  • Auto - Größen automatisch Inhalt in der Zeile oder Spalte zu passen. Wird in C # als GridUnitType.Auto oder in XAML als Auto angegeben.
  • Proportional - Größe der Spalten und Zeilen im Verhältnis zum verbleibenden Platz. Wird als Wert und GridUnitType.Star in C # und als # * in XAML angegeben, wobei # der gewünschte Wert ist. Wenn Sie eine Zeile / Spalte mit * angeben, füllt sie den verfügbaren Platz.
  • Absolut - Größe von Spalten und Zeilen mit bestimmten festen Werten für Höhe und Breite. Wird als Wert und als GridUnitType.Absolute in C # und als # in XAML angegeben, wobei # der gewünschte Wert ist.

Hinweis: Die Breitenwerte für Spalten werden standardmäßig in Xamarin.Forms auf Auto festgelegt. Dies bedeutet, dass die Breite von der Größe der untergeordneten Elemente bestimmt wird. Beachten Sie, dass dies von der Implementierung von XAML auf Microsoft-Plattformen abweicht, bei denen die Standardbreite * ist, wodurch der verfügbare Speicherplatz gefüllt wird.

RelativesLayout

Ein Layout , das Constraints für das Layout der Constraints Layout verwendet.

RelativeLayout wird verwendet, um Ansichten relativ zu Eigenschaften des Layouts oder der gleichgeordneten Ansichten zu positionieren und deren Größe zu ändern. Im Gegensatz zu AbsoluteLayout verfügt RelativeLayout nicht über das Konzept des beweglichen Ankers und hat keine Möglichkeit, Elemente relativ zum unteren oder rechten Rand des Layouts zu positionieren. RelativeLayout unterstützt die Positionierung von Elementen außerhalb der eigenen Grenzen.

RelativeLayout (Bild von Xamarin)

Ein relativesLayout in XAML sieht folgendermaßen aus:

<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>

Dasselbe Layout kann mit diesem Code erreicht werden:

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 organisiert Ansichten in einer eindimensionalen Linie ("Stack") entweder horizontal oder vertikal. Views in einem StackLayout können basierend auf dem Platz im Layout unter Verwendung der StackLayout in der Größe StackLayout werden. Die Positionierung wird dadurch bestimmt, dass die Bestellansichten zum Layout und zu den Layoutoptionen der Ansichten hinzugefügt wurden.

StackLayout (Bild von Xamarin)

Verwendung in XAML

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

Verwendung im 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow