Указание RowDefinition.Height в коде - PullRequest
       4

Указание RowDefinition.Height в коде

13 голосов
/ 01 сентября 2011

Когда вы создаете Grid в xaml, вы можете определить RowDefinitions как таковые

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
</Grid>

Мне нужно сделать то же самое в коде.Я знаю, что могу написать

RowDefinition row = new RowDefinition();
row.Height = new GridLength(1.0, GridUnitType.Star);

, но это не сильно мне помогает, так как я получаю строку. Вероятно, я мог бы создать свой собственный конвертер "string to GridLength", но это не чувствуетсяправильно, так как он работает очень гладко от XAML.Конечно, я пробовал следующее, но оно не работает

row.Height = new GridLength("*");

Что мне здесь не хватает?

Ответы [ 3 ]

15 голосов
/ 01 сентября 2011

Структура GridLength имеет определенный TypeConverter, который используется при создании экземпляра из Xaml.Вы также можете использовать его в коде.Она называется GridLengthConverter

Если вы посмотрите на GridLength.cs с помощью Reflector, то это выглядит так.Обратите внимание на TypeConverter

[StructLayout(LayoutKind.Sequential), TypeConverter(typeof(GridLengthConverter))]
public struct GridLength : IEquatable<GridLength>
{
    //...
}

Вы можете использовать его как

GridLengthConverter gridLengthConverter = new GridLengthConverter();
row.Height = (GridLength)gridLengthConverter.ConvertFrom("*");
10 голосов
/ 01 сентября 2011

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

var converter = new GridLengthConverter();
row.Height = (GridLength)converter.ConvertFromString("*");

В sidenote вы найдете конвертеры, подобные этому, для множества типов, так как многие анализируются из строк в XAML, например BrushConverter & ImageSourceConverter

8 голосов
/ 28 февраля 2013

вам не хватает включить ваше RowDefinition в RowDefinitions

RowDefinition row = new RowDefinition();
row.Height = new GridLength(1.0, GridUnitType.Star);
YourGrid.RowDefinitions.Add(row);

До встречи!Rutx

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