使用多个网格分割器和不同大小调整大小的问题

时间:2019-02-25 16:40:37

标签: wpf gridsplitter

我一直在尝试解决Gridsplitters的一个奇怪问题,但是文档和Google都没有真正能够帮助我解决这个问题。

问题是我有一个带有多个网格拆分器的网格,其中某些行具有不同的高度单位。三行具有具体的高度值,一行具有1个星号,以使其“吸收”剩余的所有空间。

不幸的是,这引起了一些奇怪的Gridsplitter行为。基本上,尝试通过操纵第5行中的网格分割器来设置GridRow 4和6的高度不会影响第6行(底部行)的高度。相反,它操纵第4行和第2行,并与第3行中的网格分割器重叠。

如果我将所有行高都设置为特定的像素高度,则所有的网格拆分器都可以正常工作,但这使Grid扩展到了屏幕边缘之外,这不是预期的。

我制作了一个小样本项目来说明问题。

<Window x:Class="GridSplitterTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:GridSplitterTest"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="100"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="100"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="50"></RowDefinition>
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" >TextBlock01</TextBlock>
    <GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" Background="Black" ResizeBehavior="PreviousAndNext" ResizeDirection="Rows"></GridSplitter>
    <TextBlock Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center" >TextBlock02</TextBlock>
    <GridSplitter Grid.Row="3" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" Background="Black" ResizeBehavior="PreviousAndNext" ResizeDirection="Rows"></GridSplitter>
    <TextBlock Grid.Row="4" HorizontalAlignment="Center" VerticalAlignment="Center" >TextBlock03</TextBlock>
    <GridSplitter Grid.Row="5" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" Background="Black" ResizeBehavior="PreviousAndNext" ResizeDirection="Rows"></GridSplitter>
    <TextBlock Grid.Row="6" HorizontalAlignment="Center" VerticalAlignment="Center" >TextBlock04</TextBlock>

</Grid>

任何知道什么地方有问题以及是否有办法解决此问题的人?

1 个答案:

答案 0 :(得分:0)

我认为这里实际上没有任何错误。除了行数设置为固定大小外,您已经拥有所有行。因此,调整任何行高只能使网格重新调整该行(第2行)以进行补偿,因为其余的其他行(第0和6行)也是固定大小。

我认为解决此问题的唯一方法是使所有文本块行成比例。例如:

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