У меня довольно простое требование, для которого я не могу найти решение. Взгляните на мой пример кода XAML:
<Grid ShowGridLines="True" VerticalAlignment="Top" Margin="5">
<Grid.RowDefinitions>
<RowDefinition MinHeight="100"/>
<RowDefinition MinHeight="100"/>
<RowDefinition MinHeight="100"/>
</Grid.RowDefinitions>
<Grid.Resources>
<Style TargetType="GridSplitter">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Bottom"/>
<Setter Property="Height" Value="1"/>
<Setter Property="Background" Value="Black"/>
</Style>
</Grid.Resources>
<GridSplitter/>
<GridSplitter Grid.Row="1"/>
<GridSplitter Grid.Row="2"/>
</Grid>
У меня есть три строки, начинающиеся с высоты 100. Я хочу, чтобы пользователь мог перетаскивать край любой строки, чтобы она была выше, поэтому я помещаю GridSplitter
в каждую строку.
Проблема заключается в следующем:
Элемент управления GridSplitter перераспределяет пространство между строками или столбцами в сетке без изменение размеров сетки. Например, когда GridSplitter изменяет размер двух столбцов, свойство ActualWidth одного столбца увеличивается, в то же время свойство ActualWidth другого столбца уменьшается на ту же величину.
Приведенный выше XAML не не работает, ни одна из строк не меняет размер при перетаскивании, потому что GridSplitter
пытается взять высоту из другой строки и добавить ее к изменяемой. Поскольку ни одна из строк не может быть меньше (MinHeight="100"
), ничего не происходит.
Но я не хочу, чтобы взяла высоту из других строк. Я хочу увеличить размер одного ряда независимо, что, в свою очередь, изменит общую высоту Grid
. Если я перетаскиваю средний ряд на 50 пикселей выше, я хочу, чтобы этот ряд был 150 пикселей, в то время как два других остаются 100 пикселей, что делает общую сетку 350 пикселей.
Есть ли какие-либо настройки для GridSplitter
Я отсутствует, что позволит это? Или есть какой-то другой элемент управления, который я могу использовать?