Voici le code que j'ai:
this.ColumnDefinitions.Add(new ColumnDefinition(Width = new GridLength(1, GridUnitType.Star))
J'ai essayé de mettre la première définition sur une ligne comme celle-ci mais cela me donne une erreur:
var column1 = new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }; var column2 = new ColumnDefinition() { Width = new GridLength(30, GridUnitType.Absolute) }; this.ColumnDefinitions.Add(column1); this.ColumnDefinitions.Add(column2);
3 Réponses :
la documentation montre clairement que ColumnDefinition n'a qu'un constructeur vide
var col = new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }; this.ColumnDefinitions.Add(col);
Vous mélangez la terminologie du constructeur et de l'initialiseur. La ColumnDefinition n'a qu'un seul constructeur - celui par défaut. Dans l'autre cas, vous pouvez initialiser la propriété Width
à partir de l'initialiseur de ColumnDefinition
, comme vous l'avez fait dans les premières lignes de code. Fondamentalement, l'initialiseur appelle le ctor par défaut, puis il remplit ses propriétés avec les valeurs que vous avez fournies.
Ce que vous pouvez faire dans ce cas est:
this.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
Vous peut en savoir plus sur les initialiseurs en C # ici .
Je recommande vivement d'utiliser Extensions de balisage C # , introduites dans Xamarin.Forms v4.6 .
Voici un exemple de mon application, GitTrends: https://github.com/brminnick/GitTrends/blob/4045027a32b9eeadc3a10c5ed94df9199738cb2a/GitTrends/Views/ReferringSites/ ReferringSitesDataTemplate.cs .
using Xamarin.Forms; using Xamarin.Forms.Markup; using static Xamarin.Forms.Markup.GridRowsColumns; class CardView : Grid { public CardView() { RowSpacing = 0; RowDefinitions = Rows.Define( (Row.TopPadding, AbsoluteGridLength(TopPadding)), (Row.Card, Star), (Row.BottomPadding, AbsoluteGridLength(BottomPadding))); ColumnDefinitions = Columns.Define( (Column.LeftPadding, AbsoluteGridLength(16)), (Column.Card, Star), (Column.RightPadding, AbsoluteGridLength(16))); Children.Add(new CardViewFrame().Row(Row.Card).Column(Column.Card)); } enum Row { TopPadding, Card, BottomPadding } enum Column { LeftPadding, Card, RightPadding } }