Grid ColumnDefinition星形宽度超出父容器的边界

时间:2012-07-31 17:43:31

标签: c# wpf xaml user-interface .net-4.0

我设计了一个网格行作为另一个网格,在两列之间有一个20/80的分割,左边的一个网格的最小宽度为250:

    <Grid Grid.Row="1" HorizontalAlignment="Stretch">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" MinWidth="250"/>
            <ColumnDefinition Width="4*"/>
        </Grid.ColumnDefinitions>

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

当宽度大于1250时,这会按预期工作,但是一旦我收缩到那个以下,第一列就会停止收缩(因为它应该),因为它已达到250,但是第二列的收缩速度与它之前做过(而不是以与周围窗口相同的速率折叠)。结果是,即使网格被设置为拉伸到其容器,也会切掉一部分内容:

enter image description here

为什么蓝色框架不会像其他星形宽度列那样调整其父容器的大小?为什么突然设置最小宽度?


更新:我在示例窗口中重建了我的整个用户界面(只需用边框替换每个部分的内容),我无法重现问题:

enter image description here

有可能内容(没有遇到任何MinWidth约束并且似乎也正确调整大小,尽管它们的父网格列太慢)仍然以某种方式影响网格列?原来是在UserControl中,这是在一个窗口?

2 个答案:

答案 0 :(得分:1)

我道歉 - 鉴于原始问题中的信息,我们无法回答这个问题。

不幸的是,问题是Xceed DataGridControl实现中的一个错误。通过在原始UI中使用边框或其他控件替换每个DataGridControl,可以按原样调整所有元素的大小。

问题不在于DataGridControls遇到了自己的大小限制。事实上,当窗口调整大小时,他们继续调整自己的大小,但他们错了。我的猜测是,他们的实现依赖于向上层次结构或父UI元素,并根据他们计算可用空间的大小自行调整大小。我发现,只要指出其中一个父元素的确切宽度就可以解决这个问题。如果父元素使用星形大小调整,并且这些宽度受列定义限制为具有最大或最小宽度或高度,则Xceed DataGridControl无关紧要并且错误地请求大于或小于可用大小的大小,即使它已被告知伸展以适应其父控制。

我发现的唯一解决方法是不涉及抵制Xceed(非常诱人)是重新设计布局,以便第一列不会与窗口的其余部分一起增长,并且只是固定在其最小宽度:

    <Grid Grid.Row="1" HorizontalAlignment="Stretch">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="250"/>
            <ColumnDefinition Width="4*"/>
        </Grid.ColumnDefinitions>

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

在大分辨率屏幕上看起来很奇怪且不成比例地挤压,但是在自动调整大小时限制宽度的任何尝试都会导致所描述的行为。

答案 1 :(得分:0)

这是完全正确的。 在您的定义中,您定义第一列宽度必须至少为250.因此1 *也必须至少为250。你的第二列宽度必须是你的第一列乘以4的值。抱歉我的英文不好,我希望你能理解。 我找不到一个简单快速的解决方案。也许您必须将第二列的MaxWidht属性绑定到网格的ActualWidth属性,然后将该值减少250。