GridSplitter с минимальными ограничениями

Мне нужен макет Grid с двумя строками и разделителем между ними. Строки должны иметь минимальную высоту 80 пикселей.

Этот код отлично работает:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" MinHeight="80" />
        <RowDefinition Height="5" />
        <RowDefinition Height="*" MinHeight="80" />
    </Grid.RowDefinitions>
    <TextBlock Grid.Row="0" Text="{Binding Path=ActualHeight, RelativeSource={RelativeSource Self}}" />
    <GridSplitter Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="Red" />
    <TextBlock Grid.Row="2" Text="{Binding Path=ActualHeight, RelativeSource={RelativeSource Self}}" />
</Grid>

Но я хочу, чтобы верхняя строка имела автоматическую высоту, пока пользователь вручную не изменит ее с помощью разделителя. Поэтому я изменил код на этот:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" MinHeight="80" />
        <RowDefinition Height="5" />
        <RowDefinition Height="*" MinHeight="80" />
    </Grid.RowDefinitions>
    <TextBlock Grid.Row="0" Text="{Binding Path=ActualHeight, RelativeSource={RelativeSource Self}}" />
    <GridSplitter Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="Red" />
    <TextBlock Grid.Row="2" Text="{Binding Path=ActualHeight, RelativeSource={RelativeSource Self}}" />
</Grid>

И есть проблема. Splitter по-прежнему удовлетворяет ограничениям строк, но он начинает бесконечно увеличивать высоту верхней строки, если я перетаскиваю разделитель слишком низко. В результате нижняя строка оказывается полностью ниже нижней границы окна.

Я сделал рефлектор в коде GridSplitter и увидел, что он использует другую логику, если строки имеют высоту Авто или Звезда.

Есть предложения, как я могу "исправить" это?

15
задан DrKoch 6 May 2015 в 08:41
поделиться