调整多个 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>
我整天都在尝试解决 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>