WPF 网格 - 在 window 调整大小时缩小一列以将所有内容保留在屏幕上

WPF Grid - Shrink one column on window resize to keep all content on screen

我在 WPF 中有一个显示一些动态数据的 5 列网格。第 1、2 和 4 列是固定宽度的,因为它们实际上是标签,但第 2 和 5 列可以有不同的长度。

第 3 列应该换行以确保显示所有内容,但可以扩展到最大宽度 390。但是第 5 列应该保留在一行中。当我调整 window 的大小时,所有内容都必须保留在屏幕上而没有水平滚动条。中间(第 3)列应缩小以保留屏幕上的第 4 和第 5 列。

当前行为:当内容超出 390 时,第 3 列将换行,但调整 window 不会导致此列调整大小,但会导致第 5 列然后第 4 列从屏幕上消失。

目前的代码如下:

  <Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto" />
    </Grid.ColumnDefinitions>
    <Grid x:Name="ListItemControl"
          Grid.Column="0"
          MinHeight="50"
          Width="auto"
          VerticalAlignment="Top">
        <Border Background="LightBlue"
                Margin="1,0,1,1" />
        <Grid VerticalAlignment="Center"
              Margin="20,0,0,0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="40" />
                <ColumnDefinition Width="130" />
                <ColumnDefinition Width="*"
                                  SharedSizeGroup="col2" />
                <ColumnDefinition Width="150" />
                <ColumnDefinition Width="auto"
                                  SharedSizeGroup="col4" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition MinHeight="50" />
            </Grid.RowDefinitions>
            <TextBlock Grid.Column="0"
                       Grid.Row="0"
                       Margin="0,10,0,10"
                       Text="Due" />
            <TextBlock Grid.Column="1"
                       Grid.Row="0"
                       Margin="0,10,10,10"
                       Text="Some Date" />
            <TextBlock Grid.Column="2"
                       Grid.Row="0"
                       Margin="0,10,30,10"
                       Text="There is some potentially long text here. This is a placeholder and should wrap."
                       TextWrapping="Wrap"
                       MaxWidth="390" />
            <TextBlock Grid.Column="3"
                       Grid.Row="0"
                       Margin="0,10,10,10"
                       Text="Who's responsible" />
            <TextBlock Grid.Column="4"
                       Grid.Row="0"
                       Margin="0,10,10,10"
                       Text="Name - could be a very long name" />
        </Grid>
    </Grid>
</Grid>  

非常感谢任何帮助!

您的 ListItemControl 网格位于另一个只有一列的网格内,不知道原因。删除那个父网格,你就完成了。