Подтвердить что ты не робот

Применение значения сетчатой ​​звезды в коде

Как я могу создать этот кусок XAML программно?

<Grid Name="gridMarkets">
    <Grid.RowDefinitions>
        <RowDefinition Height="10" />
        <RowDefinition Height="*" MinHeight="16" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="10" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
 </Grid>

Является ли это элегантным решением для синтаксического анализа и построения элементов управления?

Я пытался что-то сделать:

RowDefinition newRow = new RowDefinition();
newRow.Height = new GridLength(10);
newGrid.RowDefinitions.Add(newRow);

Но как назначить знак *?

Ищете любые идеи для этой проблемы! Спасибо!

4b9b3361

Ответ 1

Вы можете использовать тип устройства Grid.Star

newRow.Height = new GridLength(1, GridUnitType.Star);

Вы также можете использовать объект XamlReader для преобразования строк XAML в объекты пользовательского интерфейса из кода, хотя обычно я предпочитаю вручную создавать объекты, например, как вы их создаете.

Ответ 2

Вот несколько примеров:

grid.RowDefinitions.Add(new RowDefinition {Height = new GridLength(10)});
grid.RowDefinitions.Add(new RowDefinition {Height = new GridLength(1, GridUnitType.Star), MinHeight = 16});

grid.RowDefinitions.Add(new RowDefinition {Height = new GridLength(1, GridUnitType.Star)});
grid.RowDefinitions.Add(new RowDefinition {Height = GridLength.Auto});

и аналогично для столбцов.

Ответ 3

Использование конструктора GridLength, который позволяет вам указать GridUnitType, является правильным подходом здесь, как и другие.

Но если по какой-то причине вы хотите фактически преобразовать строковое значение в правильный тип так же, как это сделано в XAML, вы также можете это сделать:

Посмотрите на тип GridLength: он определил атрибут TypeConverter с параметром typeof(GridLengthConverter). Это означает, что вы можете использовать этот тип для выполнения преобразования:

new GridLengthConverter().ConvertFromString("*")