Xaml 行大小随数据变化的Xam网格

Xaml 行大小随数据变化的Xam网格,xaml,grid,Xaml,Grid,我希望使用XAML做一些事情,以便网格中的行高度是可变的。但我不确定这是否可能 我在一个网格中有两行,如果有数据填充每行,那么就没有问题了。但是,如果没有数据填充第二行,那么我希望第一行中的数据实际上使用两行居中 我可以通过使用Rowspan属性来实现这一点,但是我可以根据行是否有数据使其成为动态的吗 如果没有的话,我还有什么其他的方法来实现这一点吗 更新代码如下 <StackPanel Grid.Row="0" Grid.Column="4" Grid.RowSpan="2">

我希望使用XAML做一些事情,以便网格中的行高度是可变的。但我不确定这是否可能

我在一个网格中有两行,如果有数据填充每行,那么就没有问题了。但是,如果没有数据填充第二行,那么我希望第一行中的数据实际上使用两行居中

我可以通过使用Rowspan属性来实现这一点,但是我可以根据行是否有数据使其成为动态的吗

如果没有的话,我还有什么其他的方法来实现这一点吗

更新代码如下

<StackPanel Grid.Row="0" Grid.Column="4" Grid.RowSpan="2">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="40"/>
                        <RowDefinition Height="25"/>
                    </Grid.RowDefinitions>
                    <TextBlock Text="{Binding Details}" TextWrapping="NoWrap" Style="{StaticResource PhoneTextNormalStyle}" 
                       Grid.Row="0"  Grid.Column="0" Grid.RowSpan="{Binding DetailRowSpan}"  FontSize="{StaticResource PhoneFontSizeMediumLarge}" VerticalAlignment="Center" />

                    <TextBlock Text="{Binding Location}" Style="{StaticResource PhoneTextSmallStyle}"
                       Grid.Row="1" Grid.Column="0"/>

                </Grid>

            </StackPanel>

  • 谢谢

将第一行的高度属性设置为*,将第二行的高度属性设置为自动:

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

如果第二行中没有任何内容,这将使第二行的高度为0。第一行将占用所有可用空间


编辑:在重新阅读您的问题和评论之后,我认为您实际要问的是如何动态地使单个单元格跨多行(或不跨多行),这取决于下一个网格是否包含该列的内容。如果是这种情况,那么我建议在绑定到高度可能不同的单元格的类中创建一个只读整数属性。属性应通过检查相邻行来计算单元格应覆盖的行数。然后可以将其绑定到网格的RowSpan属性。

太好了-谢谢。当两行都有数据时,如果第一行的高度大于第二行的高度,我该怎么办?当您将行的高度设置为“自动”时,它将根据其内容调整大小。当您将其高度设置为*时,它将占用所有可用空间,并调整其内容大小以适应该空间。WPF是关于相对大小的。如果你真的想把最上面的一行变大,你需要把一些更大的东西放进去。当我使用上面的代码时,它的行为似乎不像我所希望的那样——不管第二个字段(第1行)是否为空,第一个字段都会保持在同一个位置。如果第二个字段为空,则其不居中。此处只是更新。。仍在尝试此操作,并且我在文本框上设置的VerticalAlignment=“Center”似乎仅适用于它所放入的行,即使第二行为空。抱歉,丢失了此行。我明白你在这里想做什么。我会发布一个编辑。