WPF,XAML:可用空间小于MinWidth时拉伸(带图片)

时间:2019-06-20 13:24:35

标签: c# wpf xaml width margin

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

我希望网格具有以下与尺寸有关的属性:

  • Grid.Width> = 220px:外列的宽度= 10px(更大的MaxWidth) 每个中间列占用剩余空间
  • Grid.Width <= 200px:外列的宽度分别为0px和中间 列占据了整个网格
  • 在200像素到220像素之间,外部列从0像素(在200处)增长到 每个10像素(在220像素)。在这些点之间,中间列的宽度 保持200像素,因为外部列需要将Grid.Width更改为 增长/收缩。

我使用了以下代码:

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

enter image description here

它完美地工作,除了一个问题:如果Grid的Width小于中间列的MinWidth,则该列不会更改其宽度以适合Grid的宽度,而是保持200px。但是,如果我删除MinWidth属性,则当网格的宽度为200px时,外两列将不会“拉伸”为0px。

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

1 个答案:

答案 0 :(得分:0)

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

如果您想要更多自定义的行为,则应使用C#等编程语言来实现。例如,您可以处理SizeChanged的{​​{1}}事件,并在宽度小于200 DIP时隐藏外部列。像这样:

Grid

XAML:

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);
    }
}