Top.Mail.Ru
Ответы

C# WPF. Что означает в <RowDefinition Height="1*"/> и как оно высчитывается?

У меня высота 560 программы. Высота второй строки задана 90. Первая - 1*, что должно быть равно оставшемуся месту (560-90=470).

1234567
 Title="MainWindow" Height="560" Width="800"> 
    <Grid>          
        <Grid.RowDefinitions> 
            <RowDefinition Height="1*"/> 
            <RowDefinition Height="90"/> 
        </Grid.RowDefinitions> 
    </Grid> 

Но если я введу явно 470, то первая строка опускается ниже и забирает место из второй строки (будто 470 это слишком большое значение для первой строки и на самом деле 1* примерно ~455 (на глаз прикинул)).

1234567
 Title="MainWindow" Height="560" Width="800"> 
    <Grid>         
        <Grid.RowDefinitions> 
            <RowDefinition Height="470"/> 
            <RowDefinition Height="90"/> 
        </Grid.RowDefinitions> 
    </Grid> 

Значит, я ошибаюсь и 1* занимает не всё оставшееся место? Как тогда оно высчитывается и сколько у меня высота первой строки на самом деле?
//Сразу уточню, код именно такой, какой вписал сюда, это новый проект и никаких элементов не добавлял, которые могли бы занимать место. Просто сетка, которую хз как высчитать...

Дополнен

Ответ найден: Height="560" это высота всего окна (с учетом шапки с названием приложения), а не клиентского окна. Поэтому первая строка не 470, а меньше.

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Знаток

В WPF в XAML, когда вы устанавливаете значение Height="1*" для RowDefinition, это означает динамическую высоту, которая занимает оставшееся пространство после учета всех фиксированных высот других строк.

Как это работает:

Если у вас есть строка с Height="1*", то она будет занимать все оставшееся пространство после выделения фиксированных высот других строк.
Если у вас только одна строка с Height="1*", то она будет занимать все оставшееся пространство в контейнере.
Если у вас несколько строк с Height="1*", то они будут равномерно делить оставшееся пространство между собой.
В вашем случае, если у вас высота окна 560, а высота второй строки задана как 90, то первая строка с Height="1*" должна занимать оставшиеся 470 единиц высоты.

Если при установке высоты первой строки в 470 она опускается ниже, возможно, это связано с другими элементами в вашем интерфейсе или с настройками контейнера. Убедитесь, что нет других элементов, которые могут влиять на распределение пространства.

Если оставшиеся 470 единиц не соответствуют ожидаемому поведению, попробуйте провести отладку, чтобы увидеть, как распределяется пространство между строками. Можете также попробовать установить Height="*" для первой строки, чтобы она занимала все доступное пространство, и посмотреть, как это повлияет на отображение.

Аватар пользователя
Мудрец

В данном случае * занимает всё оставшееся место. У элемента может быть граница 1-2 пикселя, либо какой-нибудь паддинг.
Всегда используй * хотя бы в одной колонке.