Применение Grid Star Size в коде позади - PullRequest
13 голосов
/ 27 февраля 2012

Как мне построить этот кусок 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);

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

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

Ответы [ 3 ]

38 голосов
/ 27 февраля 2012

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

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

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

8 голосов
/ 27 февраля 2012

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

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

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

5 голосов
/ 27 февраля 2012

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

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

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

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