我正在使用GridSplitter来调整网格中的单元格,但是它的行为不是我所期望的,我找不到解决方案。它是一个包含三行的网格,第一行的行定义设置为Auto并包含一些元素。第二行包含一些数据,行的定义为*以填充剩余空间。最后一行是需要调整大小的状态栏,因此其中包含一个网格分割器,并且行定义高度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>
当您向上拖动时,您会注意到底部文字消失。
我尝试了各种各样的东西,例如将网格分割器放在自己的单元格中,将Bights Height绑定到另一个对象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”并将其更改为*就像这样
然而,这使得最后一行的大小等于它之前的行,而不是所请求的单元格大小。
答案 0 :(得分:3)
GridSplitter
应该位于自己的行或列中。试用GridSplitter.ResizeDirection和GridSplitter.ResizeBehavior属性。
看看以下文章:
<强>更新强>
您可以向GridLength
对象提供“星系数”。例如:
<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="95*" MinHeight="20" /> <!--here we are using 95*-->
<RowDefinition Height="Auto" />
<RowDefinition Height="5*" MinHeight="30"/> <!--and here we are using 5*-->
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="Foo" />
<TextBlock Grid.Row="1" Text="Bar" />
<GridSplitter ResizeDirection="Rows" 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>
因此,我们可以根据需要设置布局,而GridSplitter
行为不明确。
答案 1 :(得分:1)