Разделитель сетки неправильно разделяется

#wpf #xaml

#wpf #xaml

Вопрос:

У меня есть следующая сетка

 <Grid>        
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
  

мой разделитель сетки находится в строке 3 (4-я строка), определите следующим образом:

 <GridSplitter Grid.Row="3"
              ResizeDirection="Rows"
              Style="{StaticResource HorizontalGridSplitter}"
              IsTabStop="False" />
<Style x:Key="HorizontalGridSplitter"
       TargetType="{x:Type GridSplitter}">
    <Setter Property="Height"
            Value="4" />
    <Setter Property="HorizontalAlignment"
            Value="Stretch" />
    <Setter Property="VerticalAlignment"
            Value="Stretch" />
    <Setter Property="Margin"
            Value="0" />
</Style>
  

Когда я перетаскиваю разделитель, чтобы разделить строку 2/4, на самом деле строки не разделяются, кажется, что высота сетки увеличивается.

Комментарии:

1. У меня была похожая проблема, к сожалению, я не могу вспомнить, как я ее решил…

Ответ №1:

GridSplitter Имеет три разных режима изменения размера, как вы можете видеть ниже:

Поведение при изменении размера

GridSplitter Изменяет размеры указанных двух столбцов / строк в соответствии с выбранным ResizeBehaviour и в соответствии с доступным пространством для них, в вашем случае вы указали * height для предыдущей строки и Auto height для последующей строки, что означает, что он может изменить размер только предыдущей строки, следующая строка всегда останется Auto :

введите описание изображения здесь

Чтобы устранить эту проблему, вы должны установить для строк до и после значения Width="*" и настроить поведение изменения размера на ResizeBehavior="PreviousAndNext" смотрите следующий фрагмент кода:

 <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <GridSplitter Grid.Row="3" ResizeDirection="Rows" 
                  Style="{StaticResource HorizontalGridSplitter}"                      
                  IsTabStop="False" HorizontalAlignment="Stretch"
                  ResizeBehavior="PreviousAndNext" />
</Grid>
  

Также лучше установить высоту всех остальных строк на Auto или фиксированное значение, чтобы избежать любого странного поведения 🙂