我有一个3列5行的网格:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0">Gas Volume Fraction</Label>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Path=GasVolumeFraction}" MinWidth="40"></TextBox>
<Label Grid.Row="0" Grid.Column="2">-</Label>
<Label Grid.Row="1" Grid.Column="0">Density</Label>
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Path=Density}" MinWidth="40"></TextBox>
<Label Grid.Row="1" Grid.Column="2">kg/m3</Label>
<Label Grid.Row="2" Grid.Column="0" Content="Curve speed" Style="{StaticResource curveSpeed}" ></Label>
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Path=Density}" Style="{StaticResource curveSpeed}" MinWidth="40"></TextBox>
<Label Grid.Row="2" Grid.Column="2" Style="{StaticResource curveSpeed}">rpm</Label>
<WrapPanel Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3">
<RadioButton>Delta pressure</RadioButton>
<RadioButton>Head</RadioButton>
</WrapPanel>
<WrapPanel Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="3">
<RadioButton>Efficiency</RadioButton>
<RadioButton>Power</RadioButton>
<RadioButton>Torque</RadioButton>
</WrapPanel>
</Grid>
文本框和单选按钮有不同的空间需求,这使得行根据其内容呈现不同的高度。我如何使行均匀大小,但不大于必要的大小?换句话说:我希望为包含文本框(网格中最大的元素)的行设置Height=“Auto”的高度,然后对所有行使用该高度。
4条答案
按热度按时间at0kjp5o1#
实际上有一个非常简单的解决方案,使用
SharedSizeScope
提到的here。只要确保将
Grid.IsSharedSizeScope
设置为true,并确保每个RowDefinition
具有相同的SharedSizeGroup
,行应该是自动的,大小相等。dced5bon2#
理想情况下,您应该使用具有星星型大小的行,并将Grid设置为
VerticalAlignment="Top"
,但不幸的是,当网格根据其内容调整大小时,星型大小不起作用。与使用单个网格不同,垂直布局使用UniformGrid,水平布局使用嵌套的网格控件。您可以在内部网格中的列上设置SharedSizeScope,以便在它们之间共享列大小。
n8ghc7c13#
您可以使用绑定到最大TextBlock的ActualWidth和ActualHeight。
jljoyd4f4#
我的问题与上面的问题类似,但略有不同,因为
IsSharedSizeScope
方法和使用ActualWidth的绑定方法都没有为我解决这个问题。所以,我发布了另一个解决方案,希望有人能发现这个有用。所以,这里是我需要解决的问题:我有一个应用程序,其中我有一个带有拆分视图的控件-参见下面的蓝色部分-虽然我喜欢在显示器的中间有一个GridSplitter,但我想在一个单独的控件中实现蓝色部分,而在它上面的部分应该在一个单独的程序集中实现:x1c 0d1x...但是GridSplitter应该在用户不知道实际分离的情况下穿过主视图并连接两个区域。我通过在拖动
TopSplitter
或MainSplitter
时设置列宽来实现这一点。此方法没有性能损失,适用于“*”大小的列。
事实证明,同步两个或多个GridSplitter(如本例所示)实际上需要我们同步由GridSplitter“调整大小”的列宽度。拖动Top-或MainSplitter,您会看到其他区域调整大小,就像这是一个分割器一样:-)
...下面是后面所需的代码: