Как я могу создать Grid.ColumnDefinition в C#? - PullRequest
1 голос
/ 21 июня 2020

Вот код, который у меня есть:

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

Я попытался поместить первое определение в одну строку, вот так, но это дало мне ошибку:

this.ColumnDefinitions.Add(new ColumnDefinition(Width = new GridLength(1, GridUnitType.Star))

Он говорит этот ColumnDefinition не принимает конструктор, который принимает один аргумент.

Кто-нибудь знает, как решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 21 июня 2020

документы ясно показывают, что ColumnDefinition имеет только пустой конструктор

var col = new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) };
this.ColumnDefinitions.Add(col);
1 голос
/ 21 июня 2020

Я настоятельно рекомендую использовать C# Расширения разметки , представленные в Xamarin.Forms v4.6 .

Вот пример из моего приложения 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 }
}

https://github.com/brminnick/GitTrends/blob/4045027a32b9eeadc3a10c5ed94df9199738cb2a/GitTrends/Views/ReferringSites/ReferringSitesDataTemplate.cs

1 голос
/ 21 июня 2020

Вы смешиваете терминологию конструктора и инициализатора. ColumnDefinition имеет только один конструктор - конструктор по умолчанию. В другом случае вы можете инициализировать свойство Width из инициализатора ColumnDefinition, как вы это делали в первых строках кода. По сути, инициализатор вызывает ctor по умолчанию, а затем заполняет его свойства значениями, которые вы указали.

В этом случае вы можете сделать следующее:

this.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });

Вы можете прочитать больше про инициализаторы в C# здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...