如何以百分比指定网格行高?

  • 本文关键字:网格 百分比 wpf xaml
  • 更新时间 :
  • 英文 :


我有两行这样的:

<Grid.RowDefinitions>
<RowDefinition Height="85.7*" />
<RowDefinition Height="14.3*" />
</Grid.RowDefinitions>

第一个是空的,第二个包含一个组合框:

<ComboBox Grid.Row="1" Grid.RowSpan="1" ItemsSource="{Binding Names}" SelectedIndex="{Binding NameIndex}"/>

虽然我指定第二行的高度应该只有 14.3%,但两行的高度相等,为 50%。也许我在这里缺少一些概念?

完整代码:

<ListViewItem>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.857*" />
<RowDefinition Height="0.143*" />
</Grid.RowDefinitions>
<Image Name="thumbImage" Grid.Row="0" Grid.RowSpan="2" Stretch="UniformToFill" Source="{Binding MainThumbImagePath}"/>
<Image Name="contTitleImage" Grid.Row="0" Grid.RowSpan="2" Stretch="UniformToFill" Source="{Binding SlideTitleImagePath}"></Image>

<ComboBox  Name="Names" Grid.Row="1" Grid.RowSpan="1" SelectedIndex="{Binding NameIndex}"/>

</Grid>
</ListViewItem>

回应评论

但是,要求是图片占用整个项目空间,并且组合框位于其顶部,并覆盖底部图片的一小部分

不要为了这些事情而玩RowSpan。请改用嵌套网格:

<Grid>
<Image x:Name="FullSpaceContent"/>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="857*"/>
<RowDefinition Height="143*"/>
</Grid.RowDefinitions>
<ComboBox Grid.Row="1" x:Name="BottomPartContentOverlappingTheImage"/>
</Grid>
</Grid>

只需确保外部网格大小适合图像,并且内部网格大小跨越其父大小。

假设您有允许占用所有可用空间的Grid,您应该有这样的东西:

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.143*"/>
<RowDefinition Height="0.857*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
</Grid>  

我的电脑显示的结果似乎与其他电脑不同。如果我放0.143*,那么就使用了可用空间的 14.3%。因此,如果我们有 2 个项目,那么该行将占用可用屏幕的 14.3% 的 50%。但是,如果我指定14.3*它占用屏幕可用 143% 的 50%。
编辑
根据MSDN,网格的星形度量定义为:

星形大小用于按加权比例分配可用空间。 在可扩展应用程序标记语言 (XAML( 中,星号值表示为 * 或 2*。在第一种情况下,行或列将接收可用空间的一倍;在第二种情况下,行或列将接收两倍的可用空间,依此类推。

最新更新