Я использую GridSplitter для изменения размера ячейки в сетке, однако ее поведение не то, что я ожидаю, и я не могу найти решение. Это сетка из трех строк, первая имеет определение строки, установленное в Auto, и содержит некоторые элементы. Вторая строка содержит некоторые данные и содержит определение строки * для заполнения оставшегося пространства. Последняя строка - это строка состояния, которая должна быть изменчиваема, и в ней есть разделитель сетки и высота определения строки Auto и MinHeight 30. 30.Перетаскивание GridSplitter вызывает увеличение ячейки при использовании Auto height/width
Проблема заключается в том, что вы перетаскиваете GridSplitter до конца top, это сделает переполнение ячейки. Я хочу, чтобы он остановился, как только он доберется до вершины. Желаемое поведение может быть достигнуто путем удаления 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 и т. Д., Но никто действительно не работает так хорошо.
Я знаю, что это не самый хорошо объясненный вопрос, но любые идеи были бы весьма признательны.
Edit: Я сделал 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» и изменить его на * как так
Это, однако, делает последний ряд равных по размеру строка перед ним, а не запрашиваемый размер ячейки.
Спасибо за ваш быстрый ответ. Я прочитал обе статьи, которые вы опубликовали, и замечаем, что они говорят, что для разделителя сетки отлично, чтобы они занимали ту же строку, что и другие элементы, если они видны (что это такое). К сожалению, даже в своем собственном ряду все еще есть та же проблема. Я обновил вопрос с помощью XAML для строки GridSplitter. Я попытался использовать все параметры ResizeDirection и ResizeBehavior, которые я понимаю, управление элементами сетки, которые он изменяет, однако высота переполнения строк все еще происходит. – Seravy
См. Обновление, пожалуйста. –
Да, Как уже упоминалось ранее, * не приведет к увеличению высоты. Мой коллега по работе и я потратили некоторое время на это. Когда сплиттер используется против определения Auto row, он изменит его на абсолютную GridLength, где и лежит проблема. Поскольку они абсолютны, нет причин, по которым разделитель сетки не может продолжать расширять ячейку. – Seravy