【问题标题】:ColumnDefinition MinWidth doesn't work correctlyColumnDefinition MinWidth 无法正常工作
【发布时间】:2011-01-21 08:46:36
【问题描述】:

我在 WPF (xaml) 中使用 Grid,在 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 代码时,您会看到前 3 列的宽度与后 5 列的宽度不同。我希望所有这些都具有相同的宽度。

有谁知道这是否是一个错误。如果有办法正确地做到这一点。

提前致谢。

【问题讨论】:

    标签: wpf xaml grid width css


    【解决方案1】:

    我明白你的意思 - 黄色左侧的列比右侧的列宽,即使它们的比例相同。

    我会说这是一个错误,尤其是当您认为以下解决方法有效时:

    <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>
    

    我猜这个错误与列如何按宽度分组有关...

    【讨论】:

    • 完美的答案和非常优雅的解决方案。谢谢。
    • 非常有趣,罗伯!很好的收获。
    【解决方案2】:

    看起来就像它的工作方式一样。你已经将网格限制在 500 点,然后说:嘿,给所有网格列相同的宽度,而且这个列至少应该是 250 点。现在WPF给你的问题是:伙计,我看到你让我给9列中的每一个至少250分,我怎么能在500分中做到这一点?它会做出决定,尊重您的最小宽度,但价格是 - 其余列的宽度。

    至于正确执行此操作的方法。你的意思是?你想要什么?

    【讨论】:

    • 我想让所有列的宽度相同。但是当中间列变得太小时,它应该具有最小宽度,但剩余空间应该均匀分布在其他列上。例如,当您在上面的示例中将 MinWidth="250" 替换为 MaxWidth="10" 时,您会看到剩余空间均匀分布。所以它适用于 MaxWidth 但不适用于 MinWidth?
    • 哦。我明白你的意思。在 Rob 展示了这种解决方法之后,我倾向于同意。这是一个错误。很抱歉没有提供帮助,但很高兴您能找到解决方案:)
    猜你喜欢
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2016-09-01
    • 2012-07-11
    • 2018-04-08
    • 2017-04-20
    • 2018-10-02
    • 2016-09-04
    相关资源
    最近更新 更多