Применение значения сетчатой звезды в коде
Как я могу создать этот кусок 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);
Но как назначить знак *
?
Ищете любые идеи для этой проблемы!
Спасибо!
Ответы
Ответ 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("*")