调整多个 gridsplitter 和不同大小的问题

Resizing problem with multiple gridsplitters and different sizes

我整天都在尝试解决 Gridsplitter 的一个奇怪问题,但是文档和 Google 都无法真正帮助我解决这个问题。

问题是我有一个包含多个网格拆分器的网格,其中一些行具有不同的高度单位。其中三行具有具体的高度值,一行具有 1 颗星,使其 "soak" 全部位于左侧 space。

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

如果我将所有行高设置为特定的像素高度,gridsplitter 都可以正常工作,但这会让 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>

任何人都知道哪里出了问题,是否有任何方法可以解决这个问题?

我不认为这里有任何问题。您拥有所有行,但有一组是固定大小的。因此,调整任何行高只允许网格重新调整那一行(第 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>