1

我将网格行设计为另一个网格,在两列之间以 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,但第二列继续以与以前相同的速度收缩(而不是以与周围窗口相同的速度倒塌)。结果是部分内容被剪掉了,即使网格设置为拉伸到其容器:

在此处输入图像描述

为什么蓝框没有像其他星宽列那样调整大小以适应其父容器?为什么设置最小宽度突然打破了这一点?


更新:我在一个示例窗口中重建了我的整个 UI(通过简单地用边框替换每个部分的内容),并且无法重现该问题:

在此处输入图像描述

内容(没有遇到任何 MinWidth 约束并且似乎也在正确调整大小,尽管像它们的父网格列一样太慢)仍然以某种方式影响网格列?原件在 UserControl 中而这是在 Window 中的事实又如何呢?

4

2 回答 2

1

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

对我来说不幸的是,问题是 Xceed DataGridControl 实现中的一个错误。通过简单地将每个 DataGridControl 替换为我的原始 UI 中的边框或其他控件,所有元素的大小都将调整为应有的大小。

问题不在于 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>

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

于 2012-07-31T19:31:45.977 回答
0

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

于 2012-07-31T18:06:23.717 回答