Я использую GridSplitter для изменения размера ячейки в сетке, однако его поведение не соответствует ожидаемому, и я не могу найти решение.Это сетка из трех строк, первая имеет определение строки, установленное на Авто, и содержит некоторые элементы.Вторая строка содержит некоторые данные и имеет определение строки *, чтобы заполнить оставшееся пространство.Последняя строка - это строка состояния, размер которой необходимо изменить, и поэтому в ней есть разделитель сетки, а высота определения строки Auto и MinHeight равна 30.
Проблема заключается в том, что вы перетаскиваете GridSplitter полностьюк вершине, это сделает переполнение ячейки.Я хочу, чтобы он остановился, как только он достигнет вершины.Желаемое поведение может быть достигнуто удалением Height = Auto из последней строки, но это заставляет нижнюю ячейку расширяться до равной высоты со средней строкой.
Вот пример XAML Pad.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" MinHeight="20" />
<RowDefinition Height="Auto" MinHeight="30" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Foo" />
<TextBlock Grid.Row="1" Text="Bar" />
<GridSplitter Canvas.ZIndex="1" VerticalAlignment="Top" Grid.Row="2" Background="Cyan" Height="5" HorizontalAlignment="Stretch" />
<TextBlock VerticalAlignment="Bottom" Grid.Row="2" TextWrapping="Wrap">LOL<LineBreak/>LOL<LineBreak/>LOL</TextBlock>
</Grid>
</Page>
Когда вы перетаскиваете наверх, вы заметите, что нижний текст исчезает.
Я пробовал разные вещи, такие как помещение разделителя сетки в его собственную ячейку и привязки высоты к другим объектам ActualHeight и т.д.но ни одна из них не работает так хорошо.
Я знаю, что это не самый хорошо объясненный вопрос, но любые идеи будут высоко оценены.
Редактировать: Я сделалGridSplitter со своей собственной строкой, как указано ниже, но, как я упоминал ранее, проблема все еще остается.У меня также есть ResizeBehavior и ResizeDirection.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" MinHeight="20" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" MinHeight="30" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Foo" />
<TextBlock Grid.Row="1" Text="Bar" />
<GridSplitter ResizeDirection="Rows" ResizeBehavior="PreviousAndNext" Grid.Row="2" Background="Cyan" Height="5" HorizontalAlignment="Stretch" />
<TextBlock VerticalAlignment="Bottom" Grid.Row="3" TextWrapping="Wrap">LOL<LineBreak/>LOL<LineBreak/>LOL</TextBlock>
</Grid>
</Page>
Примером того, что работает, является удаление последних строк Height = "Auto" и изменение его на * вот так
Это однакоделает последнюю строку равной по размеру строке перед ней, а не запрошенному размеру ячейки.