我有一个非常简单的要求,我似乎找不到解决办法。看看我的示例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 be,我希望该行高150 be,而其他两行则保持100 be,使整个网格达到350 be。
在我缺少的GridSplitter上是否有任何允许这样做的设置?或者我还能用其他的控件吗?
发布于 2020-01-28 05:13:24
这就是你所期待的吗?
<StackPanel>
<TextBlock Text="{Binding ActualHeight,
ElementName=grid,
StringFormat='Grid Actual Height: {0}'}" FontSize="30"/>
<Grid x:Name="grid" Background="Aqua">
<Grid.Resources>
<Style TargetType="GridSplitter">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Height" Value="5"/>
<Setter Property="ShowsPreview" Value="False"/>
<Setter Property="Background" Value="Black"/>
</Style>
<Style TargetType="TextBlock">
<Setter Property="Text"
Value="{Binding ActualHeight,
RelativeSource={RelativeSource AncestorType=StackPanel},
StringFormat='Row Actual Height: {0}'}"/>
<Setter Property="FontSize" Value="30"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition MinHeight="100" Height="100" />
<RowDefinition Height="Auto" />
<RowDefinition MinHeight="100" Height="100" />
<RowDefinition Height="Auto" />
<RowDefinition MinHeight="100" Height="100" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Background="Tan">
<TextBlock />
</StackPanel>
<GridSplitter Grid.Row="1"/>
<StackPanel Grid.Row="2" Background="Brown">
<TextBlock />
</StackPanel>
<GridSplitter Grid.Row="3"/>
<StackPanel Grid.Row="4" Background="Bisque">
<TextBlock />
</StackPanel>
<GridSplitter Grid.Row="5" ResizeBehavior="PreviousAndCurrent"/>
</Grid>
</StackPanel>问题在于将GridSplitter添加到Grid控件的方式。您可以在GridSplitter文档中获得更多关于这方面工作方式的详细信息。这还包括如何使用ResizeBehavior;这是我用来让它在最后一行工作的
https://stackoverflow.com/questions/59935363
复制相似问题