首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当中间列有一个MinWidth时,为什么WPF Grid不能平等地共享空间呢?

当中间列有一个MinWidth时,为什么WPF Grid不能平等地共享空间呢?
EN

Stack Overflow用户
提问于 2010-09-15 21:43:04
回答 4查看 1.2K关注 0票数 10

在本例中,第一列得到100,接下来的两列各得到50,这是预期的行为。

代码语言:javascript
运行
复制
<Grid Width="200" Height="200">
    <Grid.ColumnDefinitions>
        <ColumnDefinition MinWidth="100" />
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Border Background="Red" Grid.Column="0" />
    <Border Background="Yellow" Grid.Column="1" />
    <Border Background="Blue" Grid.Column="2" />
</Grid>

如果我将MinWidth移到中间一列...

代码语言:javascript
运行
复制
<Grid Width="200" Height="200">
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition MinWidth="100" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Border Background="Red" Grid.Column="0" />
    <Border Background="Yellow" Grid.Column="1" />
    <Border Background="Blue" Grid.Column="2" />
</Grid>

..。然后第一列得到33.3,最后一列得到66.6,这看起来很奇怪。不确定为什么这会改变网格的行为。我预计第0列和第2列将分别获得50。

更新:我理解为什么会发生这种情况,但我想知道是否有人认为这是一个bug (特别是因为Silverlight中的行为是不同的)

EN

回答 4

Stack Overflow用户

发布于 2011-10-21 09:09:51

只有当您有一个中心列时,才会出现这个问题,这意味着您为网格定义了奇数个列。我不确定为什么会发生这种情况,我也不认为这是故意的行为。但是,另一种解决方法是始终确保定义了偶数个列,即使您只使用奇数个列(使用MaxWidth=0隐藏额外的列)。

代码语言:javascript
运行
复制
    <Grid Width="200" Height="200">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" MinWidth="100"/>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" MaxWidth="0"/> <!--Workaround-->
        </Grid.ColumnDefinitions>

        <Border Grid.Column="0" Background="Red"/>
        <Border Grid.Column="1" Background="Yellow"/>
        <Border Grid.Column="2" Background="Blue"/>
    </Grid>

这里的缺点是您的网格中有一个空列。这样做的好处是您可以获得预期的空间分布行为。

票数 3
EN

Stack Overflow用户

发布于 2011-09-27 11:03:43

只是更新一下..我尝试过使用XAML3.5/4.0Silverlight3/4组合的.NET代码片段,但对于第二个示例仍然无法获得相同的宽度……

这个XAML是解决这个问题的唯一方法:

代码语言:javascript
运行
复制
<Grid Width="200" Height="200">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width=".5*" />
            <ColumnDefinition MinWidth="100" />
            <ColumnDefinition Width=".5*" />
        </Grid.ColumnDefinitions>
        <Border Background="Red" Grid.Column="0" />
        <Border Background="Yellow" Grid.Column="1" />
        <Border Background="Blue" Grid.Column="2" />
    </Grid>

你们这边有什么进展吗?

票数 1
EN

Stack Overflow用户

发布于 2011-10-02 05:25:25

我不确定问题到底是什么,但这两个网格的行为符合您的期望。我更喜欢第二列而不是第一列,因为它显式地指定第一列和第三列应该平等地占用剩余空间。

代码语言:javascript
运行
复制
<Grid Width="200" Height="200">
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition MinWidth="100" Width="Auto" />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Border Background="Red" Grid.Column="0" />
    <Border Background="Yellow" Grid.Column="1" />
    <Border Background="Blue" Grid.Column="2" />
</Grid>



<Grid Width="200" Height="200">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1*" />
        <ColumnDefinition MinWidth="100" Width="Auto" />
        <ColumnDefinition Width="1*" />
    </Grid.ColumnDefinitions>
    <Border Background="Red" Grid.Column="0" />
    <Border Background="Yellow" Grid.Column="1" />
    <Border Background="Blue" Grid.Column="2" />
</Grid>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3718202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档