列定义的最小宽度无法正常工作

3

我正在使用WPF(xaml)中的网格,并且在ColumnDefinition中使用MinWidth属性时会出现一些奇怪的效果。例如,当我使用9个ColumnDefinition并且每个ColumnDefinition都具有'Width="*"'属性时,其中一个中间列也具有MinWidth属性,那么其他列的大小就会出错。

嗯,很难描述,但是这段xaml代码可以很好地说明:

  <Grid Width="500">  
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*" MinWidth="250"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Border Grid.Column="0" Background="Green"/>
    <Border Grid.Column="1" Background="Blue"/>
    <Border Grid.Column="2" Background="Red"/>
    <Border Grid.Column="3" Background="Yellow"/>
    <Border Grid.Column="4" Background="Purple"/>
    <Border Grid.Column="5" Background="Orange"/>
    <Border Grid.Column="6" Background="Azure"/>
    <Border Grid.Column="7" Background="LightBlue"/>
    <Border Grid.Column="9" Background="LightGreen"/>
  </Grid>

当您运行此XAML代码时,您会发现前三列的宽度与后五列不同。我原本希望它们都有相同的宽度。

是否有人知道这是否是一个错误?如果有正确的方法,请告诉我。

提前致谢。

2个回答

10

我明白你的意思了 - 黄色列左边的列比右边的列宽,尽管它们应该被给予相同的比例。

我认为这是一个错误,特别是考虑到以下的解决方法是有效的

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="1.0000001*" MinWidth="250"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

我猜测这个bug与列按宽度分组的方式有关...


完美的答案,非常优雅的解决方案。谢谢。 - J W
非常有趣,Rob!干得好。 - Anvaka

0

看起来它就是这样工作的。你在500个点上限制了网格,并说:嘿,让所有网格列具有相同的宽度,但是这一列应该至少为250个点。现在WPF向你提问:伙计,我看到你要求我给每个9列至少250个点,那么我怎么在500个点中做到这一点呢?于是它做出了决定,尊重你的最小宽度,但代价是 - 其余列的宽度。

至于正确的做法。你指的是什么?你想要什么?


2
我想让所有列都具有相同的宽度。但是当中间列变得太小时,它应该具有最小宽度,但剩余空间应均匀分布在其他列上。例如,在上面的示例中将MinWidth =“250”替换为MaxWidth =“10”,您将看到剩余空间被均匀分配。因此,它适用于MaxWidth但不适用于MinWidth? - J W
哦,我明白你的意思了。在Rob展示了那个解决方法之后,我倾向于同意这是一个bug。很抱歉没有提供帮助,但很高兴你能找到解决方案 :) - Anvaka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接