WPF RowDefinition Weirdness

У меня есть приложение, которое я пытаюсь отладить, и я просматриваю различные настройки во время выполнения с помощью snoop.

Проблема у меня заключается в следующем:

Есть сетка, высотой 50,4 . Он имеет 3 RowDefinitions, каждая из которых имеет высоту 1 звезда (*). Следовательно, можно предположить, что каждое значение RowDefinition будет иметь фактическую высоту 50,4/3 (16,8). Однако я вижу, что первые 2 определения RowDefinition имеют ActualHeight, равный 25,2, а третье имеет ActualHeight, равное 0. Все три по-прежнему имеют высоту 1 звезда.

Как это возможно? Я просто вижу, как вы можете достичь этой ситуации. Вы не можете изменить ActualHeight грамматически как доступный только для чтения. Высота должна быть установлена ​​в проходе Grid's Arrange.

Кто-нибудь знает какие-либо обстоятельства, которые могут привести к этому сценарию?

1 ответ

Я нашел ответ - я не знаю, является ли это ошибкой WPF или что я не прочитал документацию должным образом

<Border Background="Red" HorizontalAlignment="Center" VerticalAlignment="Center">
    <Grid HorizontalAlignment="Center" VerticalAlignment="Center" Margin="5">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBox Text="123" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" />
        <TextBox Text="123" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
        <TextBox Text="123" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" />
        <TextBox Text="123" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
        <TextBox Text="123" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed" />
        <TextBox Text="123" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed" />
    </Grid>
</Border>

Если вы посмотрите на код, то увидите, что есть строки размером 3 звезды (*), которые ВСЕ должны иметь равную долю высоты сетки, независимо от их содержимого.

Однако, когда вы свернете ВСЕ из содержимого, назначенного этой строке, сама строка ТАКЖЕ сворачивается. (если вы отслеживаете его, он имеет высоту *, но ActualHeight 0)

Кто-нибудь считает это нормальным поведением? Я никогда не слышал об этом во всех моих разработках WPF за последние 5 лет

Другие вопросы по тегам