WPF, XAML: Stretch when available space is smaller than MinWidth (有图)

WPF, XAML: Stretch when available space is smaller than MinWidth (with pictures)

我有一个宽度可变的网格。它有三列,外面的两列用作中间列内容的可变边距。

我希望网格具有以下与大小相关的属性:

我用过这个代码:

<ColumnDefinition Width="10*" MaxWidth="10" />
<ColumnDefinition Width="200*" MinWidth="200"/>
<ColumnDefinition Width="10*" MaxWidth="10" />

除了一个问题外,它工作得很好:如果网格的宽度小于中间列的最小宽度,该列不会更改其宽度以适应网格的宽度,而是保持 200 像素。但是,如果我删除 MinWidth 属性,当 Grid 的宽度为 200px 时,外部两列将不会 "stretch" 到 0px。

当网格小于 200px 时,我希望中间列拉伸到网格的宽度。 我该怎么办?

当然,如果您将其 MinWidth 设置为 200,中间列将保持 200 DIP 宽度。这正是 MinWidth 属性 的用途。

如果您想要一些更自定义的行为,您应该使用编程语言(例如 C#)来实现它。例如,您可以处理 GridSizeChanged 事件,并在其宽度小于 200 DIP 时隐藏外部列。像这样:

private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
    Grid grid = (Grid)sender;
    if (e.NewSize.Width < 200)
    {
        grid.ColumnDefinitions[0].Width = new GridLength(0);
        grid.ColumnDefinitions[2].Width = new GridLength(0);
    }
    else
    {
        grid.ColumnDefinitions[0].Width = new GridLength(10, GridUnitType.Star);
        grid.ColumnDefinitions[2].Width = new GridLength(10, GridUnitType.Star);
    }
}

XAML:

<Grid SizeChanged="Grid_SizeChanged">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="10*" MaxWidth="10" />
        <ColumnDefinition Width="200*" />
        <ColumnDefinition Width="10*" MaxWidth="10" />
    </Grid.ColumnDefinitions>
</Grid>