Динамическая высота определения строки

StackOverflow https://stackoverflow.com/questions/1207750

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть простой элемент управления xaml со следующим определением строки сетки:

<Grid.RowDefinitions>
            <RowDefinition Height="15*" />
            <RowDefinition Height="60*" />
            <RowDefinition Height="20*" />
            <RowDefinition Height="20*" />
            <RowDefinition Height="15*" />
</Grid.RowDefinitions>

Каждая строка 1-3 содержит текстовый блок, в котором может быть текст, а может и не быть.В приведенном коде я хочу свести к минимуму определение строки, если там нет текста.По сути, в моем коде есть следующее:

if(textblock.Text != ""){
   grid.RowDefinitions[elementRow].Height = new GridLength(20, GridUnitType.Star);
}
else{
   grid.RowDefinitions[elementRow].Height = new GridLength(0, GridUnitType.Star);
}

Я хочу, чтобы строки 0 и 4 оставались такими, какими они определены в xaml.К сожалению, это не работает, даже несмотря на то, что в текстовом блоке в строке 2 есть текст, ничего не отображается.

Я делаю что-то не так?

Любая помощь приветствуется,

Джеймс

Это было полезно?

Решение

Не используйте обозначение звездочкой, используйте Auto для ваших определений строк.Если текстовый блок.Текст пуст, установите видимость текстового блока на Видимость.Свернутый.Затем строка сетки автоматически сократится до нуля.

Другие советы

Это не ответ на ваш вопрос, просто некоторая информация.

Символ * в поле Height (или width для столбцов) означает, что ширина строки (или столбца) Height="*" (или Width="*") займет все остальное пространство.Итак, если у вас есть сетка с 4 строками в сетке с высотой = "100", если вы сделаете это:

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

Ширина строки Height="*" будет равна 70 диусам (независимым от устройства единицам измерения).

Добавление числа перед звездочкой (Height="2*") работает только в том случае, если имеется более одной строки, использующей звездочку, число перед звездочкой указывает, сколько еще места займет эта конкретная строка (2 * = в два раза больше, 3 * в три раза больше и так далее ...).Я.E.:

<Grid.RowDefinitions>
            <RowDefinition Height="10" />
            <RowDefinition Height="10" />
            <RowDefinition Height="2*" /> <!-- this row will be twice as tall as the one below -->
            <RowDefinition Height="*" />
</Grid.RowDefinitions>

Здесь 3-й ряд будет иметь высоту 54 диуса (в два раза больше, чем 4-й ряд, высота которого составляет приблизительно 26 диусов), обе высоты составляют 80, что составляет остальное пространство сетки (10 + 10 + 26 + 54 = 100, высота сетки).

Кстати, я согласен с ответом Чарли.

Вы можете поместить свои предметы в Равномерная сетка с помощью Columns="1" И сделайте видимость текстового поля свернутой, когда вы получите пустой текст.

 <UniformGrid Columns="1">
    <TextBlock Text="AAAA" Visibility="Collapsed" Grid.Row="0"/>
    <TextBlock Text="BBBBB" Grid.Row="1"/>
    <TextBlock Text="CCCCC" Grid.Row="2"/>
    <TextBlock Text="DDDDD" Grid.Row="3"/>
    <TextBlock Text="EEEE" Grid.Row="4"/>
</UniformGrid>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top